Você não pode converter a string para um ID de objeto dentro do pipeline, você terá que passar por cada documento e convertê-lo manualmente, usando algo como (você não deveria estar armazenando uma combinação de tipos de qualquer maneira, então provavelmente vale a pena atualizar no longo correr):
como converter string em valores numéricos no mongodb
quanto ao $ lookup usa o índice, se você olhar as estatísticas deste blog, verá que os índices são usados -
http://guyharrison.squarespace.com/blog/2016/7/4/join-performance-in-mongodb-32-using-lookup.html