How can I make a stable re-entry vehicle?
Solution 1:
I did what you did, but put a stack decoupler between the Mk1 Crew Cabin and the Mk1 Command Pod, and gave the crew cabin its own heat shield and parachute. The heat shield is enough to keep it properly oriented during reentry without any input. The one trick here is that you want to delay separation as long as possible otherwise the cabin and pod will get too far apart and the one you're not controlling will be destroyed when it goes past the simulation range.
I experimented with trying to make aerodynamic reentry vehicles that could glide to a landing but didn't have any luck. This solution worked well, and I was even able to expand it to two crew cabins separated by a second decoupler.
Solution 2:
The root cause of unstable reentry is incorrect weight distribution.
To see why that matters, assume that your rocket is aligned horizontally and falling through atmosphere. Both ends of the rocket will experience the same aerodynamic force, but different gravity forces depending on their weight. As a consequence, the heavy end of your rocket will fall faster, causing the rocket to rotate the heavy end downwards.
That is, for stable reentry, the heat shield must be mounted on the heavy end of the rocket.
In your case, the crew cabin is much larger, but only slightly heavier than a command pod. That is, the dense part of your rocket is the command pod, and the rocket will tend to rotate such that it points down, causing the stability issues you experienced.
The solution is to mount your crew cabin on top of the command pod, so you can attach the heat shield to the densest part of your vehicle. Then, the vehicle will automatically orient itself such that the heat shield points downwards: