As @Shawn Abramson mentioned, this is not possible without an additional mechanism.
The sorting must be specified in the first query (
Mage_Eav_Model_Entity_Collection_Abstract:1045), as this is the result set that future queries add data to. I believe you need to always include a separate join to the price index table. This is unfortunate, as it is more records to search/load, reducing performance. That trade-off is up to you and your client.
$products = Mage::getResourceSingleton('catalog/product_collection');
['price_table' => Mage::getResourceSingleton('core/resource')->getTable('catalog/product_index_price')],
'entity_id = entity_id',
[ 'price', 'final_price' ],
'customer_group_id' => 0,
'website_id' => Mage::app()->getStore()->getWebsiteId()
The first four lines are whatever your standard collection filtering code is. Thereafter there are two functions:
$products->joinTable(): this function joins the
catalog/product_index_price table and retrieve the two columns for reference. Please Note: you need specify the
customer_group_id and the
website_id unless these placeholder values work for you.
$products->getSelect()->order(): this function performs the order process.