Evidemment, qu'avec des requêtes AJAX ça serait trop couteux.
Tu devrais plutôt faire des évènements.
Chaque personne de ton chat, est connecté et possède un listener qui à chaque évènement reçu va mettre à jour son affichage en rajoutant le nouveau message dans le chat.
Et quand tu envoies un nouveau message, tu le sauvegardes en base et tu envoies un évènement à tout ceux qui sont en écoutes.
Ca c'est la théorie, en pratique, il me semble que socket.io le fait très bien : https://socket.io/get-started/chat/