if the issue is just needing to get the last row to get the number of rows and caching the last few rows [i assume if there are a million items in the select that you're not populating a drop-list with all of them ;-)] then you may be able to take advantage of the ROW_NUMBER() function of sql server 2005
you could select count(*) from (select blah UNION select blah) to get the number of rows, then select ROW_NUMBER() as rownum,blah from (select blah UNION select blah) where rownum between minrow and maxrow to just fetch the rows that you need to display/cache
but seriously folks, if you're selecting items from a million-row table, you might want to consider a different mechanism
good luck!