Oh boy do I know your pain.
I was tasked with this very issue about 6 yrs ago. There's a number of things I needed to address and you may very well be in the same boat. Files that would take 3 hours to activate were brought down to under a minute.
As JD points out, bad practices can and will cause numerous issues. Blown constraints were a huge matter.
But you seem to be on the right path.
Some of the items I had to address:
Of course, as you stated, keep the files as clean as possible. Even run them through the Inventor task scheduler as I show here: Inventor 101 – Knock Knock Knock, “Housekeeping!” — Celtic Design Services (cdscad.com)
This process works wonders in my experience.
Use of low detailed Model States (or Level of Detail if you're on an older release), set Express mode accordingly. I think this defaults to 500 parts. (we'd have tens of thousands of parts and a good portion were unique instances). Be sure your temp files are cleared and clear it often.
We used Factory Design and our assets were highly detailed when they didn't need to be. I'd suggest maybe doing something along the same lines but with simplified components in the upper level assemblies. A lot will depend on your internal processes as well.
Another big memory hog is any reflectivity on your materials (same for textures). Refrain from using any textures and reflectivity type materials.
If and when it still comes down to hardware, make sure your CPUs are of the latest generation. Even with new Dell workstations, we found the bottleneck was the CPUs, as soon as we replaced them with the latest gen, we saw a marked improvement over what we had already done.
Once the users were aware of these items and what to look out for/correct, our files opened within minutes. We're talking 5 miles of conveyors under roof, they were huge.
Hope what little info I offered helps. If I recall other items we needed to address I'll post here.