First, check your average fps through the debugger, or with a Text object set every 0.5 seconds to "fps". I mocked up a quick test with 400 objects all with collision detection enabled and it ran at a solid 60fps in Chrome. (YMMV especially on mobile devices)
If the instances are being destroyed after the collision, you could take advantage of the performance gains of using "On Overlap" instead of "On Trigger" to see if that makes a difference.
More information on the differences between "On Overlap" and "On Collision" available here:
Overlap vs Collision
Given a total of 400 monsters, I'm assuming that your layout size is much bigger than your window size. If that is true and performance is still unacceptable even with the built-in use of collision cells, you can experiment with two different families.
There are disadvantages to using "On overlap" but if you're destroying the instances on contact, then it might not matter for you. Overlap may return multiple instances overlapping as well in the same tick. (Team1_Bill overlaps Team2_Nathan, and Team1_Jim overlaps Team2_Sam), might be difficult to parse out if Team1_Bill overlapped Nathan or Sam.
The FPS benchmark is about even for both collision systems until approximately 1000 are on screen, at which point the Team1 overlap Team2 Event routine starts to see marked improvements.
Benchmarking Capx attached.