Faits: A. Le 23 mars 2011, A._ a déposé plainte pénale contre B._ pour escroquerie, gestion déloyale et toutes autres infractions que l'instruction serait susceptible de déterminer. A._ reprochait à B._, d'une part, d'avoir fait profiter C._, société dont il était actionnaire unique, d'avantages excessifs en rapport avec des travaux de sous-traitance confiés par A._; d'autre part, dans le cadre du chantier de sa propre villa, B._ aurait fait travailler des ouvriers et aurait utilisé du matériel de A._ sans facturer entièrement ces prestations, causant de la sorte à la plaignante un préjudice de 317'157 fr. Après avoir fait procéder à l'audition de B._ par la police, le Ministère public du canton de Genève a décidé, par ordonnance du 15 novembre 2011, de ne pas entrer en matière. Par arrêt du 20 janvier 2012, la Chambre pénale de recours de la Cour de justice (ci-après: la Cour de justice ou la cour cantonale) a rejeté le recours de A._. B. Agissant par la voie du recours en matière pénale, A._ demande au Tribunal fédéral d'annuler l'arrêt cantonal et de renvoyer la cause à la Cour de justice afin qu'elle statue dans le sens des considérants. La Cour de justice renonce à se déterminer et se réfère aux considérants de son arrêt. Le Ministère public conclut au rejet du recours. L'intimé B._ conclut au rejet du recours avec suite de frais et dépens. La recourante a encore répliqué dans des observations du 16 mai 2012. 