Lo único que puedo decirte es que ir construyendo un StringBuilder, en vez de construyendo un string, es un método más rápido.
Luego le pasas a un control Literal el StringBuilder.ToString() , en vez de asignar un String construido por ti.
Yo es como lo hago.
Aunque creo que siempre que puedas utilizar un control como Repeater o DataList y enlazarlo con un DataSource, será más rapido que recorrer tu mismo el datasource e ir montando la tabla en un String, para luego mostrarla de golpe.
Te he liado? Espero que no