Bien.
Primero hago mi descargo de que el método que uso lo realice hace mas de 5 años, no se si es el mejor metodo o hay alguna forma mas ortodoxa, lo cierto es que es un codigo que no toque en estos años porque desde el principio siempre me ha funcionado mejor de lo que esperaba.
Primero (usando el ejemplo que citaste)

tengo 2 controles image cada uno con su respectivo gráfico.
Luego tengo un procedimiento que carga los datos con los que poblare el control
Luego tengo otro procedimiento que me "maquilla" el control, y en ese procedimiento tengo este codigo:
.col = 0
For nFila = 1 To .Rows - 1
.Row = nFila
Select Case .TextMatrix(nFila, 14) '***
Case 0: Set .CellPicture = Image1.Picture ': .CellPictureAlignment(0) = 4
Case Else: Set .CellPicture = Image2.Picture ': .CellPictureAlignment(0) = 4
End Select
'otros maquillajes...
Next nFila
*** Evalúo por esta columna, en este caso el grid muestra la lista de productos, si hay stock pone el botón verde, si no lo hay lo pone rojo (estoy tentado de poner uno amarillo que indique "ya se va acabar", no es difícil evaluar eso, pero mientras nadie lo financie no lo haré (me refiero a mis clientes)).
El asunto es que este código de maquillaje acompañado de otras lineas mas no resulta lento ni ineficiente, experimentando he llegado a cagar hasta 7000 registros y se pobló y maquilló en un pestañeo, ya con 1000 o 2000 filas se pasea, ah pero ojo: Cuando empiezas a tocar el grid debes poner Grid.Redraw = False/True para que no se sople pintar mientras hace el trabajo porque alli si iria lento, es decir:
Grid.Redraw = False
CodigoCargaData
CodigoMaquilla
Grid.Redraw = True
Y el resultado (en tiempo real) es este:

Servido.