как вариант можно воспользоваться рефлекшеном, правда надо будет еще подумать над оптимизацией. рефлекшен штука не быстрая.
List<Person> list = new List<Person>();
list.Add(new Person() { Age = 20, Name="Вася"});
list.Add(new Person() { Age = 21, Name = "Петя" });
list.Add(new Person() { Age = 23, Name = "Коля" });
list.Add(new Person() { Age = 18, Name = "Саша" });
PropertyInfo pi = new Person().GetType().GetProperty("Name");
List<Person> sorted = list.OrderBy(p=> pi.GetValue(p, null)).ToList();