You could try setting __index to a function and combining the two.
local function combineMetatables<ClassA, ClassB>(ClassA: ClassA, ClassB: ClassB): (ClassA & ClassB)
local self = setmetatable({}, {__index = function(_self: ClassA & ClassB, key: any): any?
if ClassA[key] then
return ClassA[key]
elseif ClassB[key] then
return ClassB[key]
else
return nil
end
end})
end