This is a little complex, because you are trying to order a string value by a numeric value - so what you need to do is cast the numeric part as an integer:
SELECT * FROM MyTable
ORDER BY
(CASE WHEN SUBSTRING(Ac, 1, 1) LIKE '[0-9]'
THEN CAST(Ac AS INT)
ELSE CAST(SUBSTRING(Ac, 3, 999) AS INT) + 1000000
END)
The 1000000 add-on is to move all the "E-" and "H-" values far beyond the "numeric only" values.
You may want to change it slightly to use the first character of the AC field to modify the 1000000 offset if you also want that included in the ordering, or provide two Order clauses.