В дополнение к красивому решению, данному @Jon Skeet, мне также нужны были ThenBy и ThenByDescending, поэтому я добавляю его на основе его решения:
public static IOrderedEnumerable<TSource> ThenByWithDirection<TSource, TKey>(
this IOrderedEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
bool descending)
{
return descending ?
source.ThenByDescending(keySelector) :
source.ThenBy(keySelector);
}