toglierei setInterval, e metterei setTimeout(): quando scade il timeout di 5000 lo fai ripartite, quando invece fallisce lo fai ripartire subito, quando va a buon fine lo fai ripartire dopo 5000 ...ovviamente ci vuole una gestione del timeout e dell'esito delle richieste (vedi guida Andr3a)

altrimenti potresti lasciare anche il setInterval, ma appunto come dici te si possono sovrapporre chiamate. Tutto funzionerà, tuttavia ci saranno delle "inefficienze". Se come me non hai racchiuso dentro allo scope locale la chiamata ajax, finisce che lanci chiamate nel vuoto. Esteticamente invece potresti avere aggiornamenti che si sovrappongono, quindi inutili, ma che all'utente potrebbero disturbare, ma questo non costituisce un problema tecnico...