If you are receiving payments or donations on a regular basis, there is a simple way to deal with them.
Use one address at a time for receiving coins, and keep using it repeatedly until you need to spend the coins on it.
Once you do that, switch to a new address, and keep using it until you need the coins on it, etcetera.
This is not particularly good from the privacy perspective, but, unless you use a mix, your coins can probably be traced even if you use a new address for each transaction received.
In this case, using a new address for each payment would only result in more transaction fees, and not yield any advantages.
Also, this does not expose the public keys any longer than absolutely necessary, which gives less time for theoretical (currently implausible) attacks on ECDSA, and since each address is used only once, you don't need to worry about the k-collision problem.