Infelizmente, eu não sei de nada que existe fora da caixa para fazer isso.
De forma trivial, você pode implementar isso com dois scanners e fazer uma leitura mesclada. Como os dois scanners estão retornando dados classificados, se os dois valores-chave forem iguais, você avança nos dois scanners. Se a Chave do Scanner1 for classificada antes da Chave do Scanner2, você sabe que a Chave não existe na tabela do Scanner2 e você avança no Scanner1. Se a Chave do Scanner2 for classificada antes da Chave do Scanner1, essa Chave não existe na tabela do Scanner2 e você avança no Scanner2.
No entanto, como você disse, isso seria muito lento, já que você tem um thread lendo uma tabela e provavelmente tem vários núcleos para executar coisas simultaneamente.
Para fazer essa escala, você pode "particionar" sua tabela em blocos (por exemplo, se as chaves da tabela são o alfabeto [A, B, C, ... Z], cada partição pode ser uma letra neste caso), e você pode paralelizar seu mesmo algoritmo. Usando o exemplo do alfabeto, você pode ter 26 clientes lendo sobre as partes das tabelas simultaneamente. Isso é algo que poderia ser facilmente implementado como um trabalho de redução de mapa também.