Fixing a messy boolean operation
I don't believe you can get a better result from a boolean modifier, they are nearly always messy, however, there are several ways to clean up a messy mesh. 

Method 1:
Rather than fixing it by hand it might be easier to just add a 'Remesh' modifier which will try to convert the mesh to a quad based mesh.

Setting the remesh modifier to 'smooth' mode and upping the Octree Depth (think of it as resolution of mesh) will result in a cleaner mesh. 

However, to get the the mesh as smooth as you want it may mean the resolution of the remesh would have to be quite high, but even at a lower resolution it can be a good starting point.

You could use a lower level remesh modifier and then a subsurf modifier after that to smooth it out again.

Method 2:
Another method is to select all the faces that make up the bottom of the mesh press F to make an ngon and then choose Ctrl + F > Poke Faces to subdivide them again. You would then also have to repeat this for the top of the mesh.

This should result in the 'topological cylinder' you mention in your question.