I have made a demo of sort like you state here. I have a massive level (.X) and I divided it into 36 smaller squares. What you'd have to do is figure out which model number you are over/on. (The model number of the smaller piece of the region) Then use the collision code against that model number.
You can call this code as a function as many times as you like, but it slows down massively when the intersect object is used more than 25 times/loop. My check does 9, so you can prolly call it 3 times without too much FPS loss.
I think you can append one model to another to make everything you load (trees, barrels,etc.) to become part of the level at load time. I'm not possitive or even sure how to do it. I usually just make everything into the level that I want collision against.
If I ever find the time, I'm going to make a QuakeII or Counter Strike type single player deathmatch demo. I'm going to use my collision code, make the level in CShop and it will have operations doors and lifts. You will have to interact with levers/buttons also. I may do a rescue the VIP type. All depends when I find the time and/or get bored enought to start it.
-Kensupen