I actually found a working solution now:
string FieldName
Func<SortDescriptor<ES_DesignInfoWrapper>, Nest.IPromise<IList>> Sorting;
System.Reflection.PropertyInfo property = typeof(ES_DesignInfoWrapper).GetProperty(FieldName);
string name = ((ElasticsearchPropertyAttributeBase)(property.GetCustomAttributes(typeof(ElasticsearchPropertyAttributeBase), false)[0])).Name;
Sorting = sort => sort
.Field(so => so
.Field(name)
.Order()
);
This gets the database name from the attribute of the property and uses it to adress the field.
Casting the attribute as the attribute base class allows me to use that for different fields like Text and Number etc. Some special sauce is needed if you want to use this for nested fields, but it works well for the basic types.
Does someone have a more elegant solution?