Matlab applying an FIR filter to a signal, generated in Matlab
In general your result match expectations, I don't see anything in there that's unusual or unexpected.

Filter design is a complicated trade off between complexity/cost, stopband attenuation, pass band ripple, transition steepness, phase distortion, time domain ringing, non-causality, latency, etc. The best way to go about is to clearly articulate the requirements for your specific application and then evaluate any design against these requirements line-by-line. 

I'd also be careful with spectral analysis: direct FFT works sometimes, but something like pwelch() is typically much more robust.