Since I've started hosting my own email server I've been using spam assassin for my spam filtering. All in all it does a pretty good job of stopping spam but unfortuantly without the volume of mail Google has to train it's filter it will simply never be as good as what you can get from hosted email with one of the major providers.
Recently I've decided that instead of constantly trying to tweak my spam filtering rules, adding new real time black lists, and so on. I've simply turned spam assassin up to be very agressive and then started using a whitelist of people and domains that I receive email from regularly.
I know that it's not an approach that would scale past a couple of people, let alone a millions like the major providers have to deal with, but for me I rarely receive email from people I have not communicated with before and simply exporting my contacts list and whitelisting those addresses seems to be working pretty well.