You'd be likely converting that over to Impulse Tracker... thus, the MPTM format itself is not always a reliable indicator of filesize.
My own techniques involve taking advantage of the auto-optimization techniques regarding exact matches of effect, instrument and volume/pan IDs. Each time this happens, you save bytes on a per-pattern basis (and in the case blank rows, they essentially cause those rows to become essentially free, since they take up a byte by default), since the Impulse Tracker file format has flags that carry the values over from a last defined row in the pattern.
If there are random blank samples in there, maybe they're literally samples that are just blocks of silence. I'd delete them manually, and sort the samples that you do use without gaps into the lowest IDs.
I would also strongly recommend a lot of downsampling... and making sure the samples are not in stereo, since that's double memory consumption.
I'll give you an example with my own 64K entry. I'm going to also give raw row counts, since that's more reliable than a pattern count (but I will also do that).
All of my samples were 8-bit to start with. Although I had leftovers at the end, my total "length" (in this case, bytes, since one sample is 8 bits=byte, not counting headers required for the samples themselves) is 27,604 bytes (that's also the total length). This also doesn't count the original Impulse Tracker's compression that can be applied to the samples, on that note... I opted out this time. I used a total of 10 samples: the largest was 8500 bytes, the smallest a mere 384 bytes (you can go even smaller, just watch the interpolation since smaller samples and lower pitches are much more noticeably affected by interpolation, and specify if you need either no interpolation. I also used 13 instrument slots for my samples.
In addition, I made my song in 26 patterns. Of those, 6 of those were 64 rows: the rest of them were 32 rows per pattern. In the end, I used 1024 rows, and at most 29 channels.