Hello !
Well, sadly there is no simple solution…
In order to be able to display a 3D object, blender needs it’s data ( polys) to be stored in the memory.
Even if you instance a collection, and then can’t access these polys anymore, they need to be stored in order to be displayed.
You can start to save some polycount if you duplicate these instances, then the data only needs to be stored once but can be displayed several times.
For that you can use instanced collection, or object instances , either by duplicate them with Alt-D, or select several objects that are the same , and do CTRL-L → Link object data.
This is a way to save some memory and get better performances.
Linking / referencing from an external file won’t bring a lot of benefits for performances here.
You may try to append everything in the same .blend if that’s easier to manage.
As said, even when linked from another file, they need to be in memory in order to be displayed.
If I do the math given your numbers 70 collection * 40 000 vertices gives ~ 3 Million vertices.
It’s big, but unless you have a low spec computer, blender should be able to handle that.
What may be a bottleneck in that situation is the number of objects.
You may want to balance objects numbers, say you have 1 000 000 objects with 10 triangles each,
Chances are that you’ll get poor viewport performances when it comes to selecting objects.
Because when you’ll ask blender to select something it will be needed to go over that 1 000 000 list of objects to find wich one is under the cursor (to sum up basically ) .
Even if you use instancing there, it may be better to reduce the objects number in order to have better performances.
If you make 100 objects with 100 000 tris each, you’ll get a much better balance and better performances. You should be able to edit those objects without issue , and managing the scene should be smooth.
Of course, you can probably go for 1000 objects without issues.
But at some point if things get too slow check the object number too.
Hopes that helps to get started, in short, try to use several instance of the same data, either by using collection instance or object instances in order to save some polycount.
And check the object numbers too which may become problematic if you have too many.
Good luck !