Печаль меня ждала в виде метода QTableView::resizeRowsToContents(), который честно вызывал методы моего делегата 50000 раз, при том что одновременно показывается не больше 30 строк.
Это потому, что ему надо просчитать значения скроллбара вертикального.
То, что вы сделали фиксированную ширину - единственный правильный способ добиться скорости, да.