If Garmin does chuck them all into memory that seems daft. Why couldn't they just be kept in storage and just called up if you had the area on screen/the GPS knew that you were within a certain distance of them?
Think about it.... You're at position $foo, and there's a bunch of waypoints in an XML file on disk. In order to work out if you're near one you have to either:
Open the file, find the first waypoint, read it into memory.
Compare the locations.
Do something or not, according to distance.
Read the next waypoint from the file into memory.
Compare the locations.
Do something or not, according to distance.
(repeat until end of file)
Get on with refreshing the display etc. and all the other stuff you're supposed to be doing.
Alternatively:
On bootup, open the file, iterate through it reading each location and identifier into some data structure in memory.
...
Then you can:
Compare the locations.
Do something or not, according to distance.
Compare the next location.
Do something or not, according to distance.
(repeat until last waypoint)
Get on with all the other stuff.
(Obviously this is a handwaving simplification.)
RAM is fast and always on. Storage access is slow, and probably means extra power draw. So it's basically a tradeoff between speed and memory use. You can throw a faster computer (and flash storage) at the problem, but that's expensive and you're likely to need more electricity. Better to give it enough RAM for an arbitrary number of waypoints etc, and set some limit so you don't run out of memory for important things like the stack. Then it becomes a tradeoff between cost of RAM and waypoint limit. How many waypoints do Marketing reckon 90% of your potential customers care about?