Отражение должно обеспечивать то, что вы хотите - в частности,
typeof(Partner).GetProperty(c.Name).GetValue(p, null)
Однако вы можете сделать это до цикла:
var columns = (IEnumerable<string>)ViewData["columns"];
var cols = columns.Select(colName =>
typeof(Partner).GetProperty(colName)).ToList();
Это дает вам набор PropertyInfo
экземпляров для повторного использования, которые вы можете использовать для каждой строки:
foreach (var col in cols) { %>
<th><%= col.GetValue(p,null) %></th>
<% }
(кстати, <th/>
должно быть <td/>
?)
Это должно быть немного эффективнее, чем повторное нахождение каждого свойства. Существуют другие способы сделать это тоже (снова быстрее).