Using the CASE expression its possible to do efficient sorting and ordering by different parameters in one query. Here is an example from Greg Beech's Tech Blog which also includes paging:
DECLARE @SortType TINYINT, @SortAscending BIT, @FirstRow INT, @MaxRows INT;SELECT @SortType = 2, @SortAscending = 0, @FirstRow = 10, @MaxRows = 10;WITH ...