Persisting a component attached to a PlayerController

What are every possible way(s) to persist a component attached to a PlayerController between levels?

I only know of 2 ways so far:

  1. Using the GameInstance to persist the component information between levels and create a new component to attach to the PlayerController when switching level and set the information stored in the GameInstance to it.

  2. Using level streaming, keeping the PlayerController on the master level and only changing the streamed level.

Either solution could work for what I’m trying to do, but they feel more like hacks to what I’m trying to accomplish.