The technical answer to the question you asked is "10-20ms, if you're not on an SSD". That's not great, actually, if you're trying to shave tens of milliseconds at a time off startup performance.
For what it's worth, this change happened because people were seeing the stat() call involved in startup profiles, taking sufficient time that it seemed worthwhile to avoid it if possible, as far as I can tell.
The directory structure may or may not be cached already: these files are in a separate directory from everything else Firefox needs at startup.
If your HDD has a seek time of 3-4ms on average, that means it needs to rotate completely in at most 6-8ms, which gives you a rotation speed of 7500-10,000 rpm. HDDs in data centers do that, sure. Consumer HDDs just don't do that, last I checked; they're mostly in the 5400-7200 rpm range, with laptops firmly in the 5400 bucket. See https://www.dell.com/en-us/shop/dell-laptops/sc/laptops?appl... for example (currently offered Dell laptops "for home" with an HDD: they're all 5400rpm). At 5400 rpm, your average latency from just the rotation is 5.5ms and your worst-case latency from the rotation is 11ms. That doesn't include other latency sources, but let's assume those are somehow scheduled away to happen during the rotation.
Keep in mind that what typically sticks in users' minds is worst-case, not average-case, behavior, so you have to bring your worst-case time budget down to whatever your target is.
I will comment on the paragraph and the way directories are stored in b-trees, being a separate directiry doesn't have a lot if bearing unless talking about FAT.
Are many users on HDDs these days? Weird that it would take this long, although I guess it's niche enough that you'd want to save those 20 ms for something used by a tiny fraction of users.
EDIT: In fact, we have many more users with magnetic HDDs than who use userChrome.css. That tells you everything you need to know about this decision right there.
For what it's worth, this change happened because people were seeing the stat() call involved in startup profiles, taking sufficient time that it seemed worthwhile to avoid it if possible, as far as I can tell.