One way of both specifying the columns, and accounting for dynamic schema, is http://api.drupal.org/api/function/drupal_schema_fields_sql - which you can then build your query from.

I'd imagine the hit to the schema is going to cost more than the MySQL internals for SELECT *, but otherwise it lets you get the best of both worlds in terms of correctness.

Nat