En este caso, el índice no ayuda porque su conjunto de resultados coincidentes consiste en casi toda la colección. Eso significa que tiene que cargar en la RAM y recorrer la mayor parte del índice, así como cargar en la RAM y recorrer los propios documentos.
Sin el índice, solo haría un escaneo de la tabla, inspeccionaría cada documento y devolvería si coinciden.
En casos como este, donde una consulta va a devolver casi una colección completa, un índice puede no ser útil.
Agregar un .limit() acelerará la consulta. También puede obligar al optimizador de consultas a no usar el índice con .hint():
db.collection.find().hint({$natural:1})
También puede forzar la consulta para que proporcione los valores de los resultados directamente desde el propio índice limitando los campos seleccionados a solo los que ha indexado. Esto le permite evitar la necesidad de cargar cualquier documento después de realizar el escaneo de índice.
Pruebe esto y vea si la salida de explicación indica "indexOnly":true
db.numbers.find({number: {$gt: 10000}}, {number:1}).explain()
Detalles aquí: