var a = new[] { 0, 1, 2, 3, 4 };
a.OrderBy(x => x > 0 ? x : int.MaxValue)
Должен быть переведен в том же порядке с помощью операторов case в SQL. Не уверен насчет int.MaxValue, может быть, вам сначала нужно будет присвоить его какой-либо переменной.
Тогда может также работать, но я не уверен, что ваша база данных может правильно оптимизировать несколько «упорядочить по». Большая часть RDMS сделает это.