Non ci sono grandi differenze di efficienza per quanto ne so tranne in alcuni casi come l'ordinamento per data (poiché gli ObjectId contengono la data e l'ora, ecc.)
Ad esempio, perderesti la possibilità di ordinare semplicemente tramite il _id perderesti anche i vantaggi per sharding e distribuzione . A parte questo, mentre continuerei a usare personalmente gli ObjectId comunque ... purché int è unquie (ovviamente) ... dovresti stare bene.
Dal _id sempre "torna" in una query, suppongo che risparmieresti un po' di tempo e trasferimento di dati (un po'.)
Puoi persino creare il tuo _id un array se lo desideri, e tutto verrà indicizzato bene, vedrai questo risposta (non che lo consiglierei necessariamente la maggior parte delle volte.)
Vedi anche:Ottimizzazione degli ID oggetto