(I originally answered this question incorrectly, see the second heading below ("To combine all distinct Tshirt instances together") for my original, irrelevant, answer)
To combine all Tshirt instances and sum their qtys:
I see you're using a tuple of color + size to uniquely identify a type of t-shirt, which means if we combine all Tshirt instances together (Concat), then group them by color + size, then Sum the qty values, then return new Tshirt instances in a new list.
List<Tshirt> aggregatedShirts = uniqueShirts = Enumerable
    .Empty<Tshirt>()
    .Concat( list1 )
    .Concat( list2 )
    .GroupBy( shirt => new { shirt.Color, shirt.size } )
    .Select( grp => new Tshirt()
    {
        Color = grp.Key.Color,
        size  = grp.Key.size,
        qty   = grp.Sum( shirt => shirt.qty )
    } )
    .ToList();
To combine all distinct Tshirt instances together
Assuming class Tshirt implements IEquatable<Tshirt> then just use Concat( ... ).Distinct().ToList():
I'd do it this way, others might prefer not to use Empty:
List<Tshirt> uniqueShirts = Enumerable
    .Empty<Tshirt>()
    .Concat( list1 )
    .Concat( list2 )
    .Distinct()
    .ToList();
If Tshirt does not implement IEquatable then you can use the overload of Distinct that accepts an IEqualityComparer<TSource>:
class TshirtComparer : IEqualityComparer<Tshirt>
{
    public static TshirtComparer Instance { get; } = new TshirtComparer();
    public Boolean Equals(Tshirt x, Tshirt y)
    {
        if( ( x == null ) != ( y == null ) ) return false;
        if( x == null ) return true;
        return x.Color == y.Color && x.size == y.size && x.qty == y.qty;
    }
    public Int32 GetHashCode(Tshirt value)
    {
        if( value == null ) return 0;
        // See https://stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-system-object-gethashcode
        Int32 hash = 17;
        hash = hash * 23 + value.Color?.GetHashCode() ?? 0;
        hash = hash * 23 + value.size?.GetHashCode() ?? 0;
        hash = hash * 23 + value.qty;
        return hash;
    }
}
Usage:
List<Tshirt> uniqueShirts = Enumerable
    .Empty<Tshirt>()
    .Concat( list1 )
    .Concat( list2 )
    .Distinct( TshirtComparer.Instance )
    .ToList();
Then to get the total quantity:
Int32 totalQuantity = uniqueShirts.Sum( shirt => shirt.qty );