What I expierienced with booleans is that, with a few rules observed, they work quite well.
- Convert your boolean operands to edutable polys first (i.e. dont subtract a “Box”)
- If you have NGon geometry, try to make them quads, else you might see missing faces after import. The “Quadifyesh” modifier might help here.
- When you clean up the mesh and combine cluttered faces, dont forget to remove the unconnected vertices.
As Tim pointed out, it about clean mesh geometry.