Ecco il seguito della prima parte, in cui svelo effettivamente l'implementazione :)

Come discusso nei commenti con Adrian, ho preferito ereditare la DataGrid (si, era un progetto 1.1) e implementare nell'override del metodo Render un modo per levare spazi e caratteri non voluti, piuttosto che scrivere un HttpModule che facesse lo sporco lavoro, perchè:

1: Questa cosa mi interessava solo in certi punti con veramente tanti movimenti. In altri, preferisco comunque avere un output Html "leggibile"
2: Comunque, il benefit di eliminare gli a-capo nelle altre parti non era preponderante (ballavano 50/100k massimo)
3: Piu importante: molti script JavaScript di terze parti smettono di funzionare se messi su una riga (sigh....)

Quindi, quello che ho fatto su due piedi è appunto eseguire l'override del Render, renderizzare il controllo in un mio StringBuilder da cui poi levo gli spazi e i tab, per ripassarlo indietro nell'HtmlTextWriter originale.

Tradotto in codice: ho creato un mio oggetto che eredita da DataGrid

public class LightDataGrid : DataGrid

Quindi ho reimplementato il render perchè facesse quello che volevo:

protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
StringBuilder sb = new StringBuilder();
StringWriter swr = new StringWriter(sb);
HtmlTextWriter hwr = new HtmlTextWriter(swr);
base.Render (hwr); 

sb.Replace(Environment.NewLine,string.Empty);
sb.Replace("\t",string.Empty);

string html = sb.ToString();
writer.Write (html);
}

L'unica pecca è che non conosco un equivalente di Environment.NewLine per evidenziare i Tab ed ho dovuto mettere un \t.... quando ho tempo cerco se c'è qualcosa....