Instead of repainting from the row down to the bottom of the grid, you can use WindowScroll to scroll the display down a row from that insertion point. Then you can just repaint the single row.
The grid has a property that does this when you use calls to grid.Cols.InsertRange to insert the row. You set grid.OptimizeInsertRemoveCells = true; to enable this behavior. But the problem is that you cannot use InsertRange in a viretual grid. But if you set this property, you can trigger the same events by explicilty calling grid.Rows.OnRangeInserted. You have to create the event arg to reflect the rows you are inserting.
Alternatively, if you want to directly do the WindowScroll, here is a button handler that will insert a new row at row 1, and then WindowScroll every thing else below it. You could modify this code to handle an arbitrary row position being inserted.
private int counter = 0;
private void button1_Click(object sender, System.EventArgs e)
{
Console.WriteLine("ClickStart " + counter.ToString());
int heightToScroll = this.gridControl1.RowHeights[1];
Rectangle scrollRect = this.gridControl1.ViewLayout.RectangleBottomOfRow(
gridControl1.Rows.FrozenCount+1);
//insert the row...
this.data.Insert(0, NewRow());
//scroll the window
this.gridControl1.ScrollWindow(0, heightToScroll, scrollRect, scrollRect, true);
//refresh the new row...
this.gridControl1.RefreshRange(GridRangeInfo.Row(1), GridRangeOptions.None);
//refresh the col headers... (if needed) normally these would not be processed by your QCI
this.gridControl1.RefreshRange(GridRangeInfo.Col(0), GridRangeOptions.None);
Console.WriteLine("ClickEnd " + (counter++).ToString());
}