Doing this type of thing in the order by clause.. now that's the way forward!
If you have 20 lines of sql in an sp and have to order the results in 5 different ways, say by date, firstname, surname, personId, email... that's when you can really cut down on your code in your stored procedure, and avoid 'dynamic queries'.
I don't give any permissions on tables to client applications.. maybe I am harsh, but I like the added layer.
CREATE PROCEDURE usp_getMyData
SELECT personId, birthDate, firstname, surname, email
WHEN 'personId' THEN personId
WHEN 'firstname' THEN firstname
WHEN 'surname' THEN surname
WHEN 'email'THEN email
WHEN @orderBy IS NULL THEN birthDate