Octant sort-lists.
Every object was stored as 8 seperate painter-order draw lists, with the correct list to draw for correct appearance being applied according to camera orientation.
The editor we built for it did an initial pass to try and figure it out programatticaly, but it still required a team of around a dozen "mappers" who's job was to laboriously hand tweak everything so it looked ok.
Do that for the scene objects and every key-frame of every enemy, and you have a very fast brute-force rendering method.
Obviously the sheer size of ID's original maps (which we stupidly tried to replicate) were far too large to fit into memory, and so after conversion and simplification had to be broken down in PSX-sized chunks. Each chunk was further sectored using a portal-based occlusion system to further reduce the draw overhead in real-time.
Other than that, just the usual PSX bits of business; surface subdivision where possible to get around the lack of perspective correction on textures, UV decals and lighting, the works. We already had a pretty solid tech-base from Shadowmaster the year before, but a huge amount of effort was poured into a bespoke unified editor program unimaginatively titled GLMFC (for OpenGL in a MFC wrapper) which basically did everything from world geometry construction from prefab chunks, lighting and texturing, level population, pathing and event triggering.
Bane of my existence for about 3 years lol.