Farrell's early screen career included the role of Aubrey Montague in the 1981 film Chariots of Fire. In 1983, he starred as Edmund Bertram in a television adaptation of the Jane Austen novel, Mansfield Park. In 1984, he appeared in Greystoke: The Legend of Tarzan, Lord of the Apes and The Jewel in the Crown.
Since then, his film and television work has included several screen adaptations of Shakespeare's works, including Kenneth Branagh's 1996 Hamlet, in which he played Horatio, a role he had played previously with Branagh for the Royal Shakespeare Company. He has also appeared in film adaptations of Twelfth Night (1996), Othello (1995) and In the Bleak Midwinter (1995). He provided the voice of Hamlet for the animated television adaptation Shakespeare: The Animated Tales (1992). He played the role of Albert Dussell in the 2009 adaption of The Diary of Anne Frank, a BBC production. In 2011, he played Margaret Thatcher's close friend and advisor Airey Neave in The Iron Lady. In 2014, he portrayed Eyre Crowe in the British documentary drama miniseries 37 Days, about the weeks leading up to World War I.
Farrell's theatre work includes performances of The Cherry Orchard, Camille and The Crucible as well as Royal Shakespeare Company productions of The Merchant of Venice, Julius Caesar and Hamlet. In the 2011 Chichester Festival he played schoolmasters Dewley and Crocker-Harris in the double bill of South Downs and The Browning Version.