Caso alguém mais se depare com essa pergunta com o mesmo problema, decidimos não usar o ORM para essa situação. Acabamos de escrever dois procedimentos armazenados SQL (um para adições e outro para exclusões), e isso simplificou o problema e aumentou imensamente a eficiência. Ao testar com mais de 100.000 registros, levaria um tempo ridículo para concluir as ações se não lançasse uma exceção de falta de memória. Com os procedimentos armazenados, nossas operações foram concluídas em alguns segundos ou menos. As únicas quedas dessa abordagem vêm do ponto de vista da testabilidade.