Faits: A. Par ordonnance du 20 juillet 2009, le Juge d'instruction de l'arrondissement de Lausanne (ci-après: le Juge d'instruction) a renvoyé A._ devant le Tribunal de police de l'arrondissement de Lausanne. Le 2 juillet 2008, le greffier chargé par le Juge d'instruction de mener une audition, avait inculpé A._ de menaces et d'infraction à la loi fédérale sur les étrangers (LEtr; RS 142.20). Le 11 mars 2009, le Juge d'instruction l'avait inculpé complémentairement de rixe. B. Par arrêt du 25 août 2009, le Tribunal d'accusation du Tribunal cantonal du canton de Vaud (ci-après: le Tribunal d'accusation) a rejeté le recours formé par A._ contre l'ordonnance du 20 juillet 2009. Il a considéré en substance que l'audition et l'inculpation par un greffier étaient conformes au code de procédure pénale vaudoise du 12 septembre 1967 (CPP/VD; RSV 312.01) et que l'enquête avait révélé des indices de culpabilité justifiant que l'inculpé soit renvoyé en jugement. C. Agissant par la voie du recours en matière pénale, A._ demande au Tribunal fédéral d'annuler cet arrêt et de renvoyer la cause au Tribunal d'accusation, respectivement au Juge d'instruction, afin que celui-ci l'inculpe personnellement puis rende une nouvelle ordonnance de renvoi. Il se plaint d'une violation de l'art. 29 al. 2 Cst. Le Tribunal d'accusation renonce à se déterminer et se réfère aux considérants de son arrêt.