What we need to really make third parties viable is Instant Runoff Elections (
http://en.wikipedia.org/wiki/Instant-runoff_voting) for all national elections.
Brief summary on that is that rather than just voting for one candidate, you rank your candidates in order of preference. Nobody wins unless they have a 50%+ majority of #1 positions. If that majority isn't held after a round of voting, you eliminate the person with the least #1's, from the list, and all positions shift up once to fill the void left by the eliminated candidate.
Long story short, it gives people the ability to vote for who the really want, but with their preferred "lesser of two evils" as a backup. Such a system would give people a way to slowly build up support for third parties over time without feeling like they've "wasted their vote" (not something I've ever been concerned with anyways - I vote for who I think should hold the position regardless, but anything to ease people into doing what they feel is right is a good thing). It's already used in several countries.
So for example, if we had:
Democratic Candidate % of 1st choice: 45%
Republican Candidate % of 1st choice: 43%
Libertarian Candidate % of 1st choice: 12%
Then the though the Democratic candidate holds the most #1's, he doesn't win yet. The Libertarian gets eliminated and whoever his supporters put down as #2 goes up to #1 for them. So if 2/3 of them had the Republican as #2 and 1/3 had the Democrat, then the results would re-balance to:
Democratic Candidate: 49%
Republican Candidate: 51%
The Republican gets a majority after the "instant runoff" and wins.
Naturally this system doesn't make the Republican or the Democrat win all the time - but in the end I think it's more fair and gives other parties more chance to grow.
Downside is that any change in the system would have to be proposed and voted on by the very people (Republicans and Democrats) who would stand to lose from this system, so I don't see it happening anytime soon.