De, lehet, eszembe jutott egy szebb (inkább csak rövidebb):
^(?=[A-Z\d]{5})(?!(?:[^\d]*\d){3,}|(?:[^A-Z]*[A-Z]){4,})(.)(?!\1)(.)(?!\1|\2)(.)(?!\1|\2|\3)(.)(?!\1\2\3\4).$
Bár itt már kérdéses, hogy melyik regexmotor fordítja jól, viszont kb. olvashatóan leírja a feladatot...