Ok here goes my thoughts.
First you need the player to move the same direction as where you are moving.
So you would use your CharacterController.velocity to give you back a Vector3.
var direction : Vector3 = controller.velocity;
make and empty gameobject right in the middle of your gameobject same position as your caracter (x,y,z) and rotation too.
make it child of your caracter.
in your code add
var lookDirection : Transform; /// add the empty gameobject here.
var rotationSpeed : float = 5.0f; /// used to know how fast the caracter will rotate.
function Update{
lookDirection.trasform.forward = direction; /// looking at the same direction as direction.
transform.rotation = Quaternion.Slerp(transform.rotation,lookDirection.transform.rotation, rotationSpeed * Time.deltaTIme); // rotate caracter to the same rotation as the lookdirection.
}
Add the empty child gameObject to lookDirection.
This will make the empty game object that you just made look at the direction the controller is moving because it give back your direction your head to in vectores and the gameobject rotates to that direction.
We use the same lookDirection as it is looking forward the direction we are heading, we can take its rotation and make our Caracter rotate to the same direction. and it will rotate smoothly 
Now for the camera I did it difriently.
Instead of mouseOrbit I used mouselook Script.
Created an empty gameObject and child it to the caracter, with the mouseLook script edit it abit, and made the emptygameObject rotate, than child the camera to the empty gameObject, it will rotate with it doing pretty much the same.
Than with the emptyGameObject that I named cameraController, took its rotation to use in the transform.rotation then used Quaternion.Slerp like before and made the caracter Slerp to the same rotation as cameraController and Slerp the cameraController to so it doesnt look to rough.