Sorry about the delay getting back to this.
So you’re looking for a setup where the player can choose between a variety of characters to play. There are a few approaches you can take to this. I think the easiest approach is to not include the model at all in the Player Prefab. Here’s the thinking:
Set the Player up with all of the components just like you would on the regular player. This includes things like the DamageTaxtSpawner. Leave off the Model mesh, and skeleton.
Create a prefab for each character that you would like the player to be able to choose. Additionally, create a ScriptableObject PlayerDefinition. This ScriptableObject shoud contain a Prefab field that points to the correct character. Like the Inventory Items, this SO should be in a Resources folder so that you can ensure that the character is package in a built game.
For the Character Selection, once the character has been selected and the game is about to start, have a helper object that you will DontDestroyOnLoad (much like the Portal setup). This object will load the first scene and tell the Player to load the correct character, passing the ScriptableObject with the character definition.
The Player will then instantiate the prefab referenced in the ScriptableObject, setting itself as the parent. When you Save and Load a game, Capture the name of the ScriptableObject, and of course restore the same. This will be like the Weapon was Saved/Loaded in the first course.
There are a few more housekeeping details to take care of, the most notable being the Right and Left hand transforms. For this, I would have a class on the prefab to house these references. When the prefab is instantiated, notify Fighter and Fighter will get the references from this class and then Equip the Weapon. (Even if Fighter Restores/equips before this has happened, the notification that the prefab has loaded will just have Fighter re-equipping, which will allow the weapon prefab to be instantiated.)
Any variables that aren’t pointer based (perhaps adjustments to stats, etc) can be handled in the CharacterConfiguration Scriptable Object.