Initially, this tip was written, when I tried to cut certain shapes on cylinder object and have to make a clean high poly version of it for bake normals.
Boolean workflow speeds up your work in that case but doesn’t have good compatibility with subdiv workflow (to make low poly cylinder perfectly round, for example).
Solution – make the low poly base mesh and boolean cutters with subdiv-ready geometry and then merge them in ZBrush (base mesh should be subdivided before that, boolean cutters – depends on situation) and dynamesh (to cut the cutter meshes from base mesh), polish and decimate (if reflections are not critical) for speed purposes.
Then import mesh in Blender, remove doubles, activate smooth shading and set the same size as low poly.
Do the same boolean operations with low poly mesh in Blender. Optionally explode both high and low poly meshes for best baking. And bake in Marmoset Toolbag 3 (has a lot of interactive adjustments on baked maps) or similar app.
Why not use the only Blender to boolean high poly? No polish, sometimes it’s doing job worse than ZBrush on high poly meshes and can’t handle tons of polygons in a single mesh very well + shading artifacts on high poly mesh may exist after boolean.
In theory, you can use non-subdiv base mesh and cutters, triangulate them and export in OBJ format to ZBrush. Then use creases and subdivs, polishing and ZRemesher then subdivs again and finally booleans. There is a chance that you will succeed and don’t have to make all low poly meshed subdiv-ready. Additionally, you can read my other tip here: https://kelheor.space/2018/07/16/how-to-get-sculptable-mesh-from-low-poly-mesh-with-bad-topology-in-blender/