Using a pass band filter matching the bandwidth of speech will help.
If you have several microphones (as is now the case on cellphones), there is a trove of ICA-like methods which can take advantage of that - but your question hints me that you have only one input.
What you want to do is "one-microphone source separation" (name taken from Roweis' groundbreaking paper), also called "single-sensor". Warning: this is far from being a solved problem, and all research in this field is very recent, with no algorithm or approach being a "clear winner" (unlike gaussian mixture models + FST have been for speech recognition).
A good framework to do that is through Wiener filtering. See Benaroya et al. "Single Sensor Source separation based on Wiener filtering and multiple window STFT" (Read section 1 & 2, don't bother with the multiresolution thing unless you really need it). In short, you compute the STFT of your signal, and for each STFT frame, you try to get estimates of the voice spectrum and of the noise spectrum, and you use Wiener filtering to recover the best estimate of the voice spectrum from that (this is akin to "soft-masking" the spectrum).
Your problem is now the following: given a STFT frame, estimate the speech and the noise component from it. The simpler approach described in the paper by Benaroya is through Vector-quantization - take several hours of speech by many speakers, compute the STFT, run LBG on it to find a codebook of 512 or 1024 typical speech frames ; do the same thing for noise. Now, given a frame of your input signal, project it non-negatively (a multiplicative gradient update procedure is described in the paper) onto the speech and noise bases, and you get your speech and noise estimates. If you don't want to deal with the non-negative projection thing, just use the nearest neighbor. This is really the simplest thing that could possibly work in the "single-sensor source separation" department.
Note that a speech recognition system could indeed provide some input for a separation system. Do a first pass of decoding using your speech recognition system. For each frame, take the mean MFCC vector from the gaussian that got the best score. Invert that back into a spectrum. Boom, you have a mask giving you the most likely spectral location of the speech-like bits, and you can use it as an input for Wiener filtering. This sounds a bit like hand-waving, but the geist is that to separate a source you need a good model for it, and a speech recognition system taken backwards is a hell of a good generative model for speech signals.