Code efficiency helps a lot.. Making sure your Gcode uses arcs for circles rather then small moves is very helpfull. Cousre it's also helpfull to be sure and do that seeing the boss makes 1 move at a time with no look ahead. think it looks 1 line ahead when drip feeding or something (remember reading it) but don't remember what off hand.
So efficient code is a good way to combat the small amount of memory.
I have not heard of anyone upgrading the memory size but considering how long it takes to download even filling what it has full I'm not sure I'd want it any bigger..hehe
I have not had great success drip feeding either. Actually I don't do it often enough to remember how to do it (for the most part) but last time I did I was using the dos easy link program in Win2000 and remember it running a program which was to long to fit in memory how ever it ended up stoping at some point in the program but don't know which line or why. Did it 2 times in a row so guessing you are seeing a similar querk to that..
Working with in the memory amount is a good thing Finding a backplotter line NCplot can help as it can automaticly remove line numbers from the gcode (saving some memory) as well.. Sometimes that removes just enough to fit.
Also moves which always end in a positive area of the axis saves a "-" char how ever more times then not I find my self zeroing to the upper left corner of my wor making Y mostly Negitive..