Caro,
Armazene sua lista de possíveis cabeçalhos vindo do banco em um array/list, e trabalhe em cima do exemplo:
List<string> temp = new List<string>(); //Armazene seus cabeçalhos obtidos do banco
DataTable dt = new DataTable();
foreach (string item in temp)
dt.Columns.Add(new DataColumn(item, typeof(string)));
dataGridView1.DataSource = dt;
Espero que este exemplo te ajude :)
[]'s