So, basically : with CSGs —
This is their expected behaviour.
CSGs unique feature is to add or subtract together and it's why they are known as boolean operators. A CSG Combiner takes a group of CSG meshes and tries to make a singular mesh out of all of them.
It potentially has attractive video memory benefits, but if every single mesh within it has to be (re)calculated together in a single frame, your game will slow tremendously.
"Is this mesh in that mesh? If yes, then make a mesh-sized hole right there — in all 100 or so meshes." (now try and figure out how many vertexes it should have).
CSG meshes ≠ Bad
I should be clear that the issue with CSGs is predominately with the way they typically degrade performance. The meshes themselves aren't baddies:
In this case they're acting no different to MeshInstances and they're as fast or faster when spawning them from code. But it's just not the same story if you opt to utilise their design feature. So the question is do you really need them in your project?
– Do you really need boolean operations? (to make chamfers, cutouts, holes, etc.)
– Do you need to group all your meshes under one CSG Combiner? (use multiple)
– It is super necessary for your project to script individual meshes at runtime?
(perhaps you could instances scenes of procedurally-ready house sections)
– Finally, could you achieve the same using a premade 3D model (Blender)?
I hope that it helps in some way!