There's another alternative, at least at the Federal level: Mandate an election contribution system that evens the playing field for all candidates by making all contributions a part of a common pool for each elected position.
Donations would earmarked when made: "Federal Senator #1 From California", "3rd District Representative From Ohio #3", etc.
There would be a fixed time period for donations, and once the donation period ended, no more donations could be made and all of the money donated at that point would be evenly divided between all candidates that meet the electoral requirements for that position.
Doing this ensures that all candidates have basically the same amount of money.
In addition, all donations would be non-tax exempt for Federal taxation purposes, whether they came from corporations or from individuals.
Then, require that all candidates only use their share of the money from the pool for that election. Any attempts to side-step this on the part of a candidate or his/her supporters would be illegal, and if discovered would result in automatic disqualification from that election, even after the fact, and if the candidate won the election, the results would be voided and the person that came in second would take the office.
This is the only way I can see to reform campaign donations, by building checks such as these into the process itself.
And for those that would say that this isn't fair? It's eminently fair from a monetary perspective, and the candidates would then be forced to actually run on the strengths of their campaign platforms and wouldn't be able to easily "drown out" others. In addition, it helps to somewhat remove the "campaign donation as bribe" aspect that exists in the campaign donation system today.
Sadly, it's obvious that we can't trust politicians and those that support them to play fair of their own accord, and so I think that we have to resort to draconian measures such as these to force them to do so.