I have created
table1.fset N(10, 0)
table1.ftnum N(10, 0)
Primary Key
PK = str(fset) + "." + str(ftnum)
table2.fsetfnum && combined C(21)
Primary Key
PK = fsetnum
The relationship worked. If we are going from PK to PK then what we have initially is a one to one relationship. I believe the key to the solution is in your indices.
If table1.fset + table1.ftnum = table2.fsetfnum and table1(PK) = table2(PK) then you have a one to one relationship.
If table1.fset + table1.ftnum = table2.fsetfnum and table1(PK) = table2(regular) then you have a one to many relationship.
Personally, I would have used a numeric key as you describe above but combine the two fields in the following way:
table1.field1 B(8,3) && Double where "3" is the maximum length of ftnum.
table2.field1 B(8,3)
Where the integer portion of field1 is equal to fset and the decimal portion is equal to ftnum and your indices remain as numeric and fast.