Let's take a step back and define dust: dust is an transaction output with a very low value. When creating an input to a new transaction that spends that output, you have to use 36 bytes to reference it (the outpoint), about 72 bytes for the signature, either 65 or 33 bytes for the public key (depending on whether it was compressed, plus about 10 more bytes for other things. Let's round it to 150 bytes.
Transaction fees are usually computed per kilobyte, so if you pay 0.0001 BTC per kB, dust is not worth spending if its worth less than 0.0000015 BTC. Hopefully, defining all this will make the following answers a bit more clear.
Bitcoin Core's "raw" RPCs let you choose what outputs to spend. You'll typically run listtransactions
to get outputs available to your wallet, createrawtransaction
to create a transaction spending specific outputs, signrawtransaction
to sign the transaction, and sendrawtransaction
to broadcast the transaction to the network. If you do this, you want to be very careful---once a transaction has been broadcast, it's very difficult to change any mistakes in it.
As you alluded to in your question, Peter Todd's dust-b-gone will purge a Bitcoin Core wallet of dust transactions by giving them to someone else (Todd, I think, but it could go to 100% transaction fees---either way, nobody is getting rich off dust). I haven't used it, but the instructions look simple.
Yes, if you transfer everything in the wallet, the dust will be gone. That's because dust is an output from a previous transaction---once you use that output as an input in a new transaction, all that matters is the value of the output in that new transaction.
Although I've never used Bitcoin Core with dust, it's likely to be the smartest Bitcoin wallet about keeping dust-related transaction fees low---so if you want an easy graphical solution, I suggest just using Bitcoin-Qt.