The trigger (entity) system was originally introduced in the quake engine based games, and subsequently into Valve’s games. The quake engine called a trace of the player’s bounding box of every physics frame and each collision that the trace detected was checked against all trigger entities in the map. The appropriate touch method was called for each entity detected.
You could implement a system as described above using ray’s….. but if you’re using bullet physics in your game, you might as well take advantage of the collision results provided by that at this time. So go with the first idea you mentioned above. This being said, you’re going to have to come up with a way to include the trigger entities into your map/scene externally from the model you create for your level.
I’ve actually been mulling over this same issue for a few weeks now, and I’m actually kinda working on a compiler for .map files produced by radiant/Hammer based level editors that will include support for these types of entities.
-Feen