No, it's a union of a left value (that happens to be a string) and a right value (that happens to be a string). But the compiler-generated code can't tell them apart.
The C# unions appear to behave like unions, not disjoint unions.
You are correct that this requires support for disjoint unions (aka tagged unions), which Haskell always had and C# will soon have.