Como criar programaticamente colunas binárias com base em uma variável categórica em data.table?

Eu tenho um grande (12 milhões de linhas)data.table que fica assim:

library(data.table)
set.seed(123)
dt <- data.table(id=rep(1:3, each=5),y=sample(letters[1:5],15,replace = T))
> dt
    id y
 1:  1 b
 2:  1 d
 3:  1 c
 4:  1 e
 5:  1 e
 6:  2 a
 7:  2 c
 8:  2 e
 9:  2 c
10:  2 c
11:  3 e
12:  3 c
13:  3 d
14:  3 c
15:  3 a

Eu quero criar um novodata.table contendo minha variávelid (que será a chave exclusiva deste novodata.table) e 5 outras variáveis binárias, cada uma correspondendo a cada categoria dey que levam valor1 se o ID tiver esse valor paray, 0 de outra forma.
A saídadata.table deve ficar assim:

   id a b c d e
1:  1 0 1 1 1 1
2:  2 1 0 1 0 1
3:  3 1 0 1 1 1

Tentei fazer isso em um loop, mas é muito lento e também não sei como passar os nomes de variáveis binárias programaticamente, pois eles dependem da variável que estou tentando "dividir".

EDITAR: como @mtoto apontou, uma pergunta semelhante já foi feita e respondidaaqui, mas a solução está usando oreshape2 pacote.
Fiquei me perguntando se há outra maneira (mais rápida) de fazer isso, talvez usando o:= operador no data.table, como tenho um conjunto de dados massivo e estou trabalhando bastante com este pacote.

EDIT2: referência das funções na postagem do @ Arun nos meus dados (~ 12 milhões de linhas, ~ 3,5 milhões de IDs diferentes e 490 rótulos diferentes para oy variável (resultando em 490 variáveis fictícias)):

system.time(ans1 <- AnsFunction())   # 194s
system.time(ans2 <- dcastFunction()) # 55s
system.time(ans3 <- TableFunction()) # Takes forever and blocked my PC

questionAnswers(3)

yourAnswerToTheQuestion