Se había complicado, pero observé que el problema era el último espacio, que al quedar sin cerrar, causaba problemas. Ahora he hecho un concat para cerrar toda la cadena con punto y rectificado los datos de los substring_index dentro de los substring_index.
Aunque lo creo, ahora no me atrevo a decir que esta es la 'refinitiva'
Código sql:
Ver originalSELECT campotexto FROM `tabla`
ORDER BY REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( SUBSTRING_INDEX( concat( campotexto, '.' ) , '.', 1 ) , 'CM', 'ZZZZ' ) , 'M', 'ZZZZZ' ) , 'CD', 'YYYY' ) , 'D', 'YYYYY' ) , 'XC', 'XXXXXXXXX' ) , 'C', 'XXXXXXXXXX' ) , 'XL', 'XXXX' ) , 'L', 'XXXXX' ) , 'IX', 'VIIII' ) , 'X', 'VIIIII' ), CAST( SUBSTRING_INDEX( SUBSTRING_INDEX( concat( campotexto, '.' ) , '.', 2 ) , '.', -1 ) AS UNSIGNED ), CAST( SUBSTRING_INDEX( SUBSTRING_INDEX( concat( campotexto, '.' ) , '.', 3 ) , '.', -1 ) AS UNSIGNED ), CAST( SUBSTRING_INDEX( SUBSTRING_INDEX( concat( campotexto, '.' ) , '.', 4 ) , '.', -1 ) AS UNSIGNED )