Si los indices son distintos tienes un problema de enfoque en tu arquitectura, si trabajan en equipo deben sentarse a definir todo antes de continuar y ejecutar el requerimiento.
 
Si eres tu solo, pues dale duro a la plantación para que homologues esto. 
Yo se que muchas veces tendemos a obviar y dejar de lado la planeación, pero la consecuencia es esta, que todo este disperso y nada homologado. 
Tu alternativa es seguir con el for o foreach tal cual lo tienes, haciendo ajustes manuales cada que lo necesites, pero ya has visto que es poco eficiente, ni para el servidor ni para ti.  
Edito: una alternativa que me viene a la mente que es mas sencillo que un for o fereach es usar array_values y array_combine    
Código PHP:
Ver original- <?php 
-   
- $factura = (- object ) array(
 
-   'id' => '123', 
-   'cliente' => 'don benito' 
- ); 
-   
-   'taco' => '123', 
-   'mole' => 'don benito' 
- ); 
-   
- $indexList = ['id', 'cliente']; 
-   
-