The point is: the dutch flag set is not totally ordered. There are many equal elements, in fact when you count distinct objects, it is a set of (at most) size 3.
The Omega(n log n) bound is probably only hard when for objects a and b either a<b or b>a holds (aka: all objects are distinct)
In fact, I can sort in O(0), when all objects must be null.
Assuming that there are at least two distinct objects, I believe the proper bound is something like Omega(n log m) where n is the number of objects and m is the number of distinct objects (that do not sort equal). Simply speaking, log m is the number of decisions needed to find the output bucket. In the general case, O(log m)=O(log n), if the amount of equal objects is low. In the dutch flag problem, m=3.
Radix sort exploits this in a different way. It is also considered to be linear. However, it requires log m passes over the data, where m is the number of possibly distinct elements. So actually, Radix sort also is Omega(n log m), where m is the number of objects it can discern.