Faits: A. Le 26 novembre 2008, le Ministère public du canton de Neuchâtel a chargé le Juge d'instruction de la Chaux-de-Fonds d'une instruction pénale dirigée contre A._, prévenu d'infraction à l'art. 19 ch. 1 et 2 de la loi fédérale du 3 octobre 1951 sur les stupéfiants et les substances psychotropes (LStup; RS 812.121). De sérieux soupçons de trafic de cocaïne et d'héroïne pesaient sur l'intéressé, pour des quantités dépassant très largement la notion du cas grave au sens de l'art. 19 ch. 2 LStup. Les charges étaient résumées dans un rapport de police du 26 novembre 2008. Les renseignements étaient issus de sources anonymes différentes, recueillis depuis le mois de septembre 2007, et avaient été confirmés par des investigations sur le terrain et des écoutes téléphoniques vaudoises et fribourgeoises. Le 6 janvier 2009, le Juge d'instruction a été informé que la police venait d'observer sur le terrain une transaction suspecte au restaurant X._ à Peseux, tenu par A._. A cet endroit, B._, en compagnie de C._, venait de transférer dans une BMW immatriculée dans le canton de Berne, occupée par D._, un sac au contenu douteux. A._ se tenait sur le pas de porte à proximité et observait la transaction. La BMW a ensuite été interceptée dans un contrôle de police, qui a permis la saisie de 5 kg d'héroïne. Le 16 janvier 2009, détenu aux prisons de Fribourg, D._ a avoué que A._ lui avait demandé de transporter "quelque chose" pour lui jusqu'à Genève en échange de 1'000 fr. Il a confirmé ses déclarations dans un interrogatoire du 10 juin 2009. Un rapport complémentaire de la police neuchâteloise du 18 mars 2009 [recte: 16 mars 2009] a résumé les investigations menées durant l'hiver dans le canton de Vaud, qui démontraient que A._ menait depuis longtemps une activité d'importation d'héroïne. E._, interpellé dans le canton de Vaud en janvier, a admis avoir livré de la drogue à A._ au mois de septembre 2008. A._ a été arrêté le 3 juin 2009 et incarcéré à la Chaux-de-Fonds. Interrogé par le Juge d'instruction, il a contesté s'être livré à tout trafic d'héroïne. Le 24 juin 2009, il a continué à prétendre que D._ était venu chez lui pour faire de la pâte à pizza et que ce qui s'était passé au X._, notamment entre celui-ci et B._, ne le concernait pas. Une perquisition dans les locaux du X._ n'a pas permis de trouver de drogue. B. Le 3 juillet 2009, le Juge d'instruction a rendu une ordonnance de confirmation de la détention préventive de A._. Par arrêt du 31 juillet 2009, la Chambre d'accusation du Tribunal cantonal du canton de Neuchâtel (ci-après: la Chambre d'accusation) a rejeté le recours de l'intéressé contre l'ordonnance précitée. Elle a considéré pour l'essentiel que de sérieuses présomptions de culpabilité subsistaient à l'encontre de celui-ci, qu'il existait un danger de collusion et que le risque de fuite ne pouvait être écarté. C. Agissant par la voie du recours en matière pénale, A._ demande au Tribunal fédéral d'annuler l'arrêt de la Chambre d'accusation du 31 juillet 2009 et d'ordonner sa mise en liberté. Subsidiairement, il conclut au renvoi de la cause à la Chambre d'accusation. Il demande en outre à être mis au bénéfice de l'"assistance judiciaire totale". La Chambre d'accusation s'en remet aux considérants de son arrêt et le Ministère public conclut au rejet du recours. Le recourant a répliqué le 11 septembre 2009. Il confirme son recours.