Boolean modifier intersect object to collection

I’ve been using the intersect option of the boolean modifier to cut sections of buildings, modeling that I do as an architect. This is in an effort to get more than archviz out of the 3D model, as part of investigating a new pipeline to feed CAD software from Blender, rather than redraw everything in CAD s/w.

Part of the procedure to prepare sections is to cut the model of the house. The house consists of several objects (about 100 and rising as I add information). The hierarchy of the objects is important! in order to keep everything organized and be able to evolve the model efficiently. So the sectioning procedure must be non-destructive, not in least to be able to get new sections automatically, without re-processing.

The basic strategy is to make a scene, per section, where I share the hierarchy of the building objects. In this seen I add section cutter objects, ie boxes that cut and include the geometry within the sectional volume. Null mesh objects are then used, as containers for the modifiers that do the sectioning:

The first modifier unions all the objects in a collection (in the image above the modifier includes the walls, stairs, etc) and the last modifier cuts, a boolean modifier intersect.
This works well enough for a few objects, those of the building shell, grouped in one or two collections.
For more complicated geometry and the addition of several steps in boolean operations, the limitations of boolean ops with a surface modeler are manifest: by including some non-manifold meshes or co-planar geometry repeatedly, eventually the geometry brakes and/or Blender crashes.
The windows and doors are an example, each is a hierarchy of several objects for each window (as produced by Archipack addon). It would be great to toss them in a collection, as above, and get the result of including only those within a boolean intersection. However to do that without adding a modifier to each one!, the only way I can think of is to place them in a collection, union them and then intersect the resulting total. However unioning is catastrophic! because of the multitude of overlapping objects and repeated operations that performing union on the all contents of the collection implies (broken geometry and crashes).

Is there a quick way to intersect each object in a collection individually? (intersection alone performed on a collection set finds the intersection of all and in this case will not serve the purpose since the intersection of dispersed windows is null). Another boolean modifier addon possibly? geometry nodes? other workflow?

Source: Boolean problems explained