Fatti: A. A._ è stato assunto il 1° ottobre 2001 quale capotreno dalla B._SA, prima a X._ poi a Y._. A causa di problemi psichici è stato in malattia a diverse riprese. Il 12 dicembre 2006, durante un diverbio, ha dato uno schiaffo a un passeggero. Il medico dott. C._ ha certificato un'incapacità lavorativa totale di una settimana a partire dal 14 dicembre 2006. Alla ripresa del lavoro, il 22 dicembre 2006, il superiore D._ ha chiamato il dipendente nell'ufficio della stazione di Y._ e gli ha consegnato la lettera di disdetta del rapporto di lavoro per il 31 marzo 2007. Lo scritto, datato 21 dicembre 2006, menzionava due episodi di violenza che non potevano essere tollerati - le minacce espresse nei confronti di un collega di lavoro il 27 ottobre 2004 e lo schiaffo del 12 dicembre 2006 - e spiegava che si prescindeva da un licenziamento immediato perché nel caso più recente il dipendente era stato provocato; per il tempo residuo egli sarebbe però stato impiegato per lavori d'ufficio, non più nei servizi con la clientela. Letta la lettera A._ l'ha accartocciata e gettata in un angolo, per poi sferrare un pugno al superiore colpendolo sulla guancia sinistra. Lo stesso giorno il rapporto di lavoro è stato sciolto con effetto immediato dal datore di lavoro. B. Il 16 agosto 2007 A._ ha promosso azione davanti al Presidente del Circolo di Y._, facendo valere pretese per licenziamento ingiustificato per un importo totale di fr. 52'696.70. Fallito il tentativo di conciliazione, la causa è stata portata dinanzi al Tribunale del Distretto di Bernina, che ha accolto l'azione con sentenza del 3 ottobre 2008. La Camera civile del Tribunale cantonale dei Grigioni ha riformato il giudizio di primo grado con sentenza del 2 giugno 2009 - notificata per scritto l'8 luglio seguente - respingendo interamente l'azione di A._. C. Prevalendosi della violazione degli art. 319 e segg. CO e dell'accertamento inesatto dei fatti ai sensi dell'art. 97 LTF, il 10 settembre 2009 A._ è insorto dinanzi al Tribunale federale con un ricorso in materia civile volto a ottenere l'annullamento della sentenza cantonale e l'accoglimento della petizione per l'importo totale di fr. 52'696.70 oltre interessi, oppure, in via subordinata, il rinvio della causa all'autorità cantonale per nuovo giudizio. Tanto la B._SA quanto la Corte cantonale hanno proposto di respingere il gravame per quanto fosse ricevibile.