Если у вас 16 млн. записей, большая часть из которых относится к одному клиенту, то тут всё может ещё зависеть от того, какие поля вы выбираете при запросе. Если выбираемых полей много или они объёмные и при этом по запросу возвращается много документов - по идее запрос может занимать очень много времени, потому курсор и падает по таймауту.
Наверное можно попытаться поиграть с количеством возвращаемых полей, тогда если при уменьшении количества вытаскиваемой информации всё нормализуется, то дело в этом.
Можно попытаться увеличить время тайм-аута курсора. Опять же если при увеличении тайм-аута курсора проблема исчезнет, то дело в количестве данных.