Решение Jon Skeet хорошо, если вы разрешаете объявлять несколько атрибутов одного типа в свойстве.(AllowMultiple = true)
ex:
[Table(HeaderText="F. Name 1")]
[Table(HeaderText="F. Name 2")]
[Table(HeaderText="F. Name 3")]
public string FirstName { get; set; }
В вашем случае я бы предположил, что вы хотите, чтобы для каждого свойства был разрешен только один атрибут.В этом случае вы можете получить доступ к свойствам пользовательского атрибута через:
var tableAttribute= propertyInfo.GetCustomAttribute<TableAttribute>();
Console.Write(tableAttribute.HeaderText);
// Outputs "F. Name" when accessing FirstName
// Outputs "L. Name" when accessing LastName