JAMÁS (Si, en mayúscula a ver si se entiende, ya cansa estar repitiendo lo mismo post por medio :S) usen un dato de entrada en un query como viene.
En vez de:
Código PHP:
$query = mysql_query("SELECT * FROM usuarios WHERE user = '".$_POST["usuario"]."' AND nivel < 3");
Usá al menos:
Código PHP:
$user = empty($_POST["usuario"]) ? '' : mysql_real_escape_string($_POST["usuario"]);
$query = mysql_query("SELECT * FROM usuarios WHERE user = '".user."' AND nivel < 3");
El resto no hace mucho, aunque la comparación del pass la incluiría en el query y la sacaría de php (estás validando que el usuario y el nivel sean únicos?).
Y van dos notas...que sabrás si adaptarlas o no:
PD: Y si queres sacar variables de session, en vez de $_SESSION["autentificado"] podés usar directamente un empty() sobre $_SESSION["id_usuario"], y yo jamás guardaría el password en una var de session, eso no es seguro por más que el mismo esté en md5.
PD2: Al usar md5 es recomendable usar un hash para simular un encodeado con una key que solo php sabrá (por brutal force podrían romperte un md5 teniendo la session con el psw).
PD3: Todo esto no hace que sea tan lento eh!!, hay un tema de conexión entre vos y tu host seguramente, o directamente por el host. Proba con un html pelado a ver si te responde igual de lento.