Есть ли какая-то причина в parcitular, что вы не хотите перебирать имена и вызывать
web.Fields.GetField( internalName )
для каждого имени?
Одним из недостатков этого подхода является то, что GetField откатится на сопоставление отображаемого имени, если внутреннее имя не может быть найдено, поэтому, если у вас есть несколько прикольных переходов между внутренним и отображаемым содержимым, может быть немного сложно. В этом случае я бы перебрал FieldCollection вместо себя и сопоставил бы все наоборот, прямо на InternalName.