Как разослать всем уведомление, не циклом?
Делаете составной уникальный ключ (`user`, `ho`) , после чего всё сводится к двум запросам
INSERT INTO `mail` (`user`, `to`, `text`, `time`)
  SELECT 2, `id`, :text, :time
    FROM `users`
    WHERE `id`  != 2;

INSERT INTO `contacts` (`user`, `ho`, `delete`, `time`)
  SELECT *
    FROM (
      SELECT `id`, 2, 0, :time
        FROM `users`
        WHERE `id` != 2
      UNION ALL SELECT 2, `id`, 0, :time
        FROM `users`
        WHERE `id` != 2
    ) AS `t`
  ON DUPLICATE KEY UPDATE `delete` = 0, `time` = VALUES(`time`);
А вообще, какой-то жуткий легаси у вас. Библиотека mysql_ уже давно почила в бозе.
Запустить в фоновом режиме. Например через Crontab. Сто сообщений хостинг даже не почувствует.