¿Algoritmo más rápido para verificar si un número es pandigital?

El número pandigital es un número que contiene los dígitos 1..número de longitud.
Por ejemplo 123, 4312 y 967412385.

He resuelto muchos problemas del Proyecto Euler, pero los problemas de Pandigital siempre superan la regla de un minuto.

Esta es mi función pandigital:

private boolean isPandigital(int n){
    Set<Character> set= new TreeSet<Character>();   
    String string = n+"";
    for (char c:string.toCharArray()){
        if (c=='0') return false;
        set.add(c);
    }
    return set.size()==string.length();
}

Crea tu propia función y pruébala con este método

int pans=0;
for (int i=123456789;i<=123987654;i++){
    if (isPandigital(i)){
         pans++;
    }
}

Usando este ciclo, deberías obtener 720 números pandigitales. Mi tiempo promedio fue de 500 milisegundos.

Estoy usando Java, pero la pregunta está abierta a cualquier idioma.

ACTUALIZAR
La respuesta de @andras ha tenido el mejor momento hasta ahora, pero la respuesta de @Sani Huttunen me inspiró a agregar un nuevo algoritmo, que tiene casi el mismo tiempo que @andras.

Respuestas a la pregunta(18)

Su respuesta a la pregunta