I suspect the problem with Reach campaign was that 1) AI (particularly the troopers) were too detailed, 2) there may have been a bit too much AI, and 3) there may have been too much scripting for individual enemies instead of scripting for all enemies (i.e. all enemies go to this point).
Lastly, perhaps the scripting was too complex.
Compare TotS 2nd AA gun area to PoA Aszod ship breaking yards. Both locations are prone to lagging up if you give the enemies a chance to accumulate.
The latter has lots of enemies but they do not have a single go-to point. Most of them are stuck where they spawn.
The former barely goes over 20 AI and once the AA gun’s destroyed, all of the enemies will head over to a particular spot. It is when the troopers get dropped off that the lag occurs IIRC.
I’ve done a lot of AI collecting in Halo 2 and Halo 3 and I can say from experience that scripting is heavily involved in frame rate lag, much more than the number of AI:
When I assembled 40 (non-scripted) Elite Councilors then kept 10 (scripted) Zealots from departing to engage Tartarus in Halo 2 Vista, the particle effects were noticeably absent (no lag since this was on PC). But when I killed the Zealots and added 10-20 more Elite Councilors, the effects were still present (marginally of course).
When I assembled an army of 25 (scripted) Hornets in Halo 3, there was missing particle effects and a lot of lag. But when I killed the 12 (scripted) Brutes at the tower, the lag was gone. When I assembled an army of about 50 (non-scripted) Hornets, there was no lag, just a lot of missing effects.
When I collected 14 marines & 8 Elites (non-scripted), 3 Grunts & 19 Brutes (scripted) in Halo 3, there wasn’t any lag, not even when the 4 Hornets dropped down or when the various vehicles I had collected were being operated.
When I modded Nightfall, moving all of the AI (about 39 Grunts, 7 Elites, 4 Jackals, 2 Guta) that spawn before you meet the militia to one particular location outside of the map (that wasn’t too isolated from their scripted paths), there was no lag at all despite the massive enemy numbers. Most of these enemies had simple scripting.