Grazie @ Gabriel-Perez e @Groo, grande idea! Nel caso in cui altri lo vogliano, ecco una versione in VB testata in Visual Studio 2012. Nel mio caso volevo che i numeri comparissero in alto a destra allineati nell'intestazione di riga.
Private Sub MyDGV_RowPostPaint(sender As Object, _
e As DataGridViewRowPostPaintEventArgs) Handles MyDataGridView.RowPostPaint
' Automatically maintains a Row Header Index Number
' like the Excel row number, independent of sort order
Dim grid As DataGridView = CType(sender, DataGridView)
Dim rowIdx As String = (e.RowIndex + 1).ToString()
Dim rowFont As New System.Drawing.Font("Tahoma", 8.0!, _
System.Drawing.FontStyle.Bold, _
System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Dim centerFormat = New StringFormat()
centerFormat.Alignment = StringAlignment.Far
centerFormat.LineAlignment = StringAlignment.Near
Dim headerBounds As Rectangle = New Rectangle(_
e.RowBounds.Left, e.RowBounds.Top, _
grid.RowHeadersWidth, e.RowBounds.Height)
e.Graphics.DrawString(rowIdx, rowFont, SystemBrushes.ControlText, _
headerBounds, centerFormat)
End Sub
È anche possibile ottenere il carattere predefinito, rowFont = grid.RowHeadersDefaultCellStyle.Font
, ma potrebbe non apparire come bene. Lo screenshot qui sotto utilizza il font Tahoma.

Non sicuro che tutti facciano questo: non potrei impostare il valore di HeaderCell prima di Form_Load() - che è in CTOR del modulo. –