A couple of observations, for what they may be worth.
If your table is transactional,and those transactions are NOT logged, there isn't really any way to buffer ongoing activity to permit changes "on the fly" as far as I know. It doesn't sound like you are doing logging, so that implies that the table needs to be either static (read-only) or off-line in order to make a schema change.
There have been a couple of companies exploring new storage technologies that have gotten me really excited in the last few years, but none of them have brought any product to market. You might be able to buy/borrow/steal some of their ideas for use in your engine.
Several of them were pursuing declarative database technologies (more closely mirroring relational algebra than SQL does), and those products would have offered the features you want almost as side effects of their design. One of the companies even planned to offer a SQL-92 compliant interface just because it would be easy to do and would provide a nice, clean migration path.
A couple of the companies were pursuing ORB like data managers that would have treated SQL as a special case. It isn't hard to imagine the modifications needed to support the kind of functionality that you want.
Getting back to your existing engine design, yes, the indexing is often the most "expensive" part of the database. Indexing usually takes more time/space/etc than everything else in the database combined, especially if it is effective indexing.
Rather than modifying the SELECT operation to improve performance, you might consider a PROJECT operation. The projection has most of the features of a selection, but it is optimized for disk-to-disk transfers, and you can code specifically to allow/restrict certain options to improve the performance. As you guessed, this is much safer than conditionally modifying the SELECT code.
Anyhow, good luck!
-PatP