Использовать PropertyInfo.GetValue / SetValue
Если у вас есть проблемы с производительностью, кешируйте объект PropertyInfo (не вызывайте GetProperty несколько раз)
Если - и только если - использование отражения является узким местом производительности вашего приложения (как видно в профилировщике), используйте Delegate.CreateDelegate
Если - и действительно действительно только если - вы абсолютно уверены, что чтение / запись значений по-прежнему является наихудшим узким местом, пришло время начать изучение забавного мира генерации IL во время выполнения.
Я действительно сомневаюсь, что это того стоит, каждый из этих уровней увеличивает сложность кода в большей степени, чем повышает производительность - делайте это только в случае необходимости.
И если доступ к свойствам во время выполнения - это ваше узкое место в производительности, то, вероятно, лучше использовать доступ во время компиляции (трудно одновременно быть универсальной и сверхвысокой производительностью).