La siguiente consulta no necesita ejecutarse regularmente y podría moverse a un trabajo cron:
DELETE FROM failures WHERE release_time < ?;
Esta consulta "booleana" devolverá 1 si la persona está en la lista negra, 0 de lo contrario:
SELECT
COUNT(ip_address) as blacklisted
FROM blacklist
WHERE
ip_address = ? AND
release_time > ? AND
failures > 5
Podría acelerar las cosas ya que no usa PHP para contar filas y comparar números:
if ($row['blacklisted']) { /* ... */ }
Realmente no creo que puedas evitar el último.