I think what you have is fine assuming:
-A program with a given character never changes actors for that character.
-Two or more programs can have a character with the same name, however since they are different programs the actor may be different for those characters.
If however the same character is always played by the same actor then you would need to create an auxiliary attribute as you said. But in real life, this is hardly ever the case.
If actors change you would need to add the scheduled attribute in your Table3.