De primeras decir que das pocos datos para hablar de rendimiento.
Es decir, lo lento o rápido de este código, aparte del código dependerá de qué tipo de consulta estás utilizando, números de registros, qué tipo de cursos estás utilizando,...
Por otro lado, sin saber muy bien lo que quieres obtener, hay una línea que no me queda clara:
Código Delphi
[-] if DBGridProveedores.SelectedRows.Find(DataSet.Bookmark, inx) then
¿Si ya estás recorriendo los "seleccionados", porqué haces un
Find para ver si la línea está seleccionada (segun el comentario)?
Revisa la ayuda sobre
GotoBookmark.