Una opción
;WITH cQuery AS
(
SELECT
*,
ROW_NUMBER() OVER (ORDER BY SortColumn) AS RowNum
FROM
MyTable
)
SELECT
*
FROM
cQuery
ORDER BY
RowNum * @Direction --1 = ASC or -1 = DESC
O CASE que en mi humilde opinión es un poco más feo
ORDER BY
CASE WHEN 'ASC' THEN SortColumn ELSE '' END ASC,
CASE WHEN 'DESC' THEN SortColumn ELSE '' END DESC