The way it currently works comes from the handling of stacks. As it stands, items which can occur in stacks are _generated_ like this. They cannot be inserted into an existing stack and large stacks are not automatically split into more reasonable sizes in normal processing.
I.e., to get a stack of plump helmet [100] would require
- different stack handling in the program itself, because they'd still spawn in 5-each stacks, which would then get joined into a big 100-stack.
and
- automatic un-stacking in item handling: a stack of 100 plump helmet is too big to fit into a barrel or pot; there'd be a new routine required so a dwarf with a barrel could remove, say, 20 mushrooms from the stack (actual amount depends on remaining capacity in the barrel, of course).
I don't think that'd be very practical for stuff with quality - at least for masterworks, the game keeps track of who made them; and dyed thread and anvils are items with quality. Furthermore, items that bear images (many decorations, all figurines) have one individually-tracked image per item, so _should_ be impossible to stack.
In short - stacks aren't a display thing, they're an actual in-program construct and would need a good deal of programming effort to change without causing more problems than it'd solve. A better trading interface would be very welcome, but i think standard macro support, integrated search routine in the trade screen and "select everything/select whole page" choices would be easier to implement.