Вижу два варианта:
1. сделать скрипт, который постоянно проверяет и обновляет в базе статус юзера. Но тут лишняя нагрузка на базу
2. Делать проверку через хранимую процедуру. Сама процедура должна выглядеть примерно так:
PROC CheckBanned(userId)
BEGIN
проверка ban_expired_date для этого userID: если expired, то is_banned = false и, при необходимости, записать в историю банов время от и до
вернуть значение is_banned
END
В коде делать обращение к этой хранимке