El ORDER BY lo tienes que poner al final, para que afecte a toda la UNION, pero entonces no quedarán los que tienen alguna cuota pagada al principio y los que no tienen ninguna al final.
Una solución que se me ocurre, pero no se si funciona, es que en el primer SELECT añadas una columna que muestre un 1 y en el segundo un 2 y ordenes por ese campo antes que por id de usuario. Algo así (pero ya te digo que no estoy seguro que funcione)
Código SQL:
Ver originalSELECT *, 1 AS b
FROM
usuarios u
LEFT JOIN cuotas_usuarios c ON u.Nusuario = c.Nusuario
INNER JOIN cuotas cu ON c.Ncuota = cu.Ncuota AND cu.fecha = '2011'
WHERE
u.Nusuario IN (SELECT u2.Nusuario FROM
usuarios u2
LEFT JOIN cuotas_usuarios c1 ON u2.Nusuario = c1.Nusuario
INNER JOIN cuotas cu2 ON c1.Ncuota = cu2.Ncuota AND cu2.fecha = '2011'
WHERE
u2.Ngrupo = '1'
AND c1.pagado = 'si')
UNION
SELECT *, 2 AS b
FROM
usuarios u3
LEFT JOIN cuotas_usuarios c2 ON u3.Nusuario = c2.Nusuario
INNER JOIN cuotas cu3 ON c2.Ncuota = cu3.Ncuota AND cu3.fecha = '2011'
WHERE
u3.Ngrupo = '1'
AND u3.Nusuario NOT IN (SELECT u4.Nusuario FROM
usuarios u4
LEFT JOIN cuotas_usuarios c3 ON u4.Nusuario = c3.Nusuario
INNER JOIN cuotas cu4 ON c3.Ncuota = cu4.Ncuota AND cu4.fecha = '2011'
WHERE
u4.Ngrupo = '1'
AND c3.pagado = 'si')
ORDER BY b, c.Nusuario