The length of data that has to be seen by a filter is roughly inversely proportional to a filter's transition width (other things being similar).
Imagine if you were to FFT a signal sampled at 50kHz to see a difference in that signals spectrum between 15 Hz and 20 Hz. You would need an FFT of length 10,000 or longer in order for those two frequencies to end up in separate FFT result bins. To see a nice clean 5 Hz wide transition band below that 20 Hz cut-off, you would need an even longer FFT, than maybe 20k samples.
A FIR filter kernel would need to have roughly the same order of length as that FFT to gather enough information from the signal to produce the same filter transition separation, low pass or high pass. That's probably an unrealistic length for a FIR filter, as the accumulated numerical noise might dominate the process. An IIR filter with a pole that close to the unit circle would also be near or past the limits of numerical stability.
If a much wider transition band meets your needs, you might try downsampling your signal by a few orders of magnitude, low pass filtering that result, upsampling the low pass result to the original sample rate, and subtracting that low frequency content from the original signal. Or, if not, using FFT/IFFT overlap-add/save fast convolution with very long FFTs, maybe on the order of 128k samples in length, etc.