I also found another approach that seems to be working with my current meshes.
Right now my sources meshes generated by taking a low-res cage, applying a heavy subsurf and then displacement modifier, and then simplifying the result in meshlab
Instead, what I just tried was to duplicate each mesh, apply a light subsurf, boolean those results, subsurf more, and then bake the original detailed source objects into a displacement map on the subsurfed boolean result. The final result is a single high poly mesh that looks about like I want but didn't involve any booleans on 50k+ poly meshes.
I'm a little worried this'll cause problems when I go to upload it due to self-intersecting faces along the boolean edge boundaries, but I don't have time at the moment to check that. If it is maybe I'll be able to clean it up in meshlab with a few iterations of deleting self-intersecting faces and filling holes, or failing that painting out the displacement along the crease edges.