The short answer:
To get nice results with booleans on polygons you have to make the two entities have a similar level of division. If you can align the geometry for both entities then you will get mostly clean topology too.
The realistic answer:
If you can get away with avoiding the boolean operations then you will learn a lot more about modelling, and you will work faster (have more control, and be capable of fixing issues). The idea of a boolean operation is more based in maths than in practical polygon modelling, but it is possible and can look good. Here is a quick youtube search for this topic
Booleans have become really quite nice in Blender 2.5+ onwards after implementing the CARVE library. But don't expect the convenience of a solid modeller like SolidWorks or other CAD packages that represent geometry internally as mathematical equations.
The time spent trying to line up two entities for a clean boolean might be better spent modelling by hand (in this case). Using a few circle polygons and a mirror modifier you'd be surprised how much easier this is to model - plus the added bonus that you can quickly change the geometry without having to individually boolean the whole thing.
example image

the geometry here isn't optimal if you want to bevel the sharp edges, that requires a bit of planning - and beyond the scope of this answer,
example .blend (shows all the steps to get the basic idea) At least when you do it by hand you can take into account that you might want to bevel a few edges and create the extra guiding geometry to do that.
Try doing a bevel on booleaned geometry, it's a world of pain.
1)
How to clean.2)
How to avoid the problem in the first place, both have very different answers and I think it isn't leading to such useful results, especially because the image shows an example which you are probably better off not using booleans for. $\endgroup$ – ideasman42 Jul 4 '13 at 23:39