Dado que el WHERE actúa sobre la tabla "CLIEPROV CP1" yo trataría de empezar por ahí las uniones con las otras tablas.
Código SQL
[-]
SELECT MC.ID_MOV, DC.ID_DETCIL, MC.FECHADOC, DC.CIL,CI.TIPOGASID, TG.TIPOGAS,
CI.DESCRIPCION,CI.CAPACIDAD, MC.SERIE, MC.DOCUMENTO,DC.PLAZO,
DC.FECHADEV, DC.DOCDEV,MC.NOMDESTINO, CP1.NOMBRE,CP2.ID_CLIENTE,
CP2.TIPO, CP2.NOMBRE,DC.LUGAR, DC.OBSERVACION
FROM
CLIEPROV CP1
JOIN MOVCILINDROS MC ON MC.NOMDESTINO=CP1.ID_CLIENTE
JOIN DETALLECIL DC ON DC.MOVCIL=MC.ID_MOV
JOIN CILINDROS CI ON DC.CIL=CI.ID_CILINDRO
JOIN CLIEPROV CP2 ON CI.PROPIETARIO=CP2.ID_CLIENTE
JOIN TIPOGASES TG ON CI.tipogasid=TG.id
WHERE
CP1.ID_CLIENTE > 0
Además de esto probaría la consulta utilizando LEFT JOIN.
Los índices que utiliza aparentemente son los correctos y parecen óptimos.
Código SQL
[-]
CLIEPROV CP1
JOIN MOVCILINDROS MC ON MC.NOMDESTINO=CP1.ID_CLIENTE
ALTER TABLE MOVCILINDROS ADD CONSTRAINT FK_MOVCILINDROS_DEST FOREIGN KEY (NOMDESTINO) REFERENCES CLIEPROV (ID_CLIENTE) ON DELETE NO ACTION ON UPDATE CASCADE;
y
Código SQL
[-]
JOIN DETALLECIL DC ON DC.MOVCIL=MC.ID_MOV
ALTER TABLE DETALLECIL ADD FOREIGN KEY (MOVCIL) REFERENCES MOVCILINDROS (ID_MOV) ON DELETE CASCADE ON UPDATE CASCADE;