ti dico cosa farei io (anche se non ci sono poi tantissimi dettagli).

crea una tabella (fisica o in memoria, nel secondo caso se devi scrollarla spesso può convenire caricarla in RAM e poi scriverla tutta in un colpo prima della join) che registra le righe della griglia.
In pratica fai una tdbgrid che opera con un tdatasource/tdataset.

Lì fai "paciugare" l'utente (immagino abbia comandi del tipo "seleziona una riga, seleziona tutto, inverti selezione), mediante un campo flag, alla fine esegui la query come join con la tabella temporanea