Subconfigurando uma tabela de dados por intervalo, usando a pesquisa binária

Como você define um subconjunto de uma tabela de dados por um intervalo numérico, com a intenção de usar a pesquisa binária?

Por exemplo:

require(data.table)
set.seed(1)

x<-runif(10000000,min=0,max=10)
y<-runif(10000000,min=0,max=10)

DF<-data.frame(x,y)
DT<-data.table(x,y)

system.time(DFsub<-DF[DF$x>5 & DF$y<7,])
# user  system elapsed 
# 1.529   0.250   1.821 

#subset DT
system.time(DTsub<-DT[x>5 & y<7])
# user  system elapsed 
#0.716   0.119   0.841 

O item acima não usa uma chave (verificação em vetor) e a velocidade não é tão dramática. Qual é a sintaxe para definir um intervalo numérico de uma tabela de dados, usando a pesquisa binária? Não consigo encontrar um bom exemplo na documentação; seria útil se alguém pudesse fornecer um exemplo usando a tabela de dados de brinquedos acima.

Edição: Esta pergunta é semelhante, mas ainda não demonstra como subconjunto por um intervalo:data.table: varredura de vetor v pesquisa binária com colunas numéricas - setkey super lento

questionAnswers(2)

yourAnswerToTheQuestion