I would approach it using 3D, but fixing the camera so it would appear 2D, or 2.5D if you want. You could re-use game objects by teleporting them once they are off-screen. For instance, if your character is moving to the right, any object that passes beyond the left edge of the screen could then get re-used by teleporting it ahead of the player, where it would then come into view again. You could also use ent_morph to change objects as needed, to add some variety. This way, you could make a huge level, but only have a few dozen game objects that actually exist on the level.

It seems like teleporting objects and morphing them would also take up a lot of memory, but it is nothing compared to having hundreds or thousands of objects, so it should work out if you can figure out how to code it.