With no disrespect to Yoshi P., he's not a code developer and isn't omniscient when it come to the state of his own codebase. No one could be with something that big. I'm sure there's some technical debt in the engine they ported over. Also, technical debt is a constant in any codebase. You will have some amount of it no matter how diligent you are. And with tight deadlines, people are going to take shortcuts in order to get cool thing out the door before the release window. Technical debt can also be not just code, but ideas engrained in the design of the data.
Other people may confuse "average PC considerations" for "spaghetti code". I'm not one of them. I'm also aware that cloud servers aren't a magic bullet that would save the game. A lot of cloud services aren't designed for that kind of compute, more B2B and some B2C scenarios. It's more likely that the design that they've built on top of that worked when they started and was designed under the constraints of the time is extremely difficult to unravel. In my development world, that difficulty is technical debt. Tech debt is the thing you need to pay off before you can do the cool new thing you really want to do.
I would bet money that retainer and character inventories are modeled identically, probably in the same database storage which is why they are the way they are in game. We can't have a unified inventory because they don't want to load all the various character records into memory at the same time. Being able to buy additional ones just makes it that much more difficult to change. Crafting from inventory probably naturally fails due to the same limitation.
I would also bet money that the limitations around accessing and transferring inventories on so many screens is because their system doesn't have the server-side guardrails to prevent accidental or intentional data corruption (e.g., duping). So, instead the UI locks a lot of screens to prevent you from consuming an item and transferring an item at the same time. Note how the Use button is disabled in item transfer scenarios (e.g., chocobo bags or retainer inventories open). There's a lot you can figure out about the design of a mature system by observing its behaviors and limitations.