How to optimize boat rotation

Unity’s profiler has identified that the majority of my cpu is being used by this script, particularly the transform.rotatearound part, i’m experiencing rather low FPS ~40 (on a machine that can run BF3 on ultra) and was wonder how i could go about optimizing it.

(profiler says nearly 80% of the cpu used for the game is for this script alone

  using UnityEngine;
    using System.Collections;
    
    public class boat : MonoBehaviour {
    
    public float speed;
    private float turnspeed=0f;
    public GameObject player;
    public GameObject position;
    public Rigidbody boatr;
    
    private bool onBoat=false;
    private bool forward=false;
    private bool left=false;
    private bool right=false;
    private Vector3 lastpos;
    
    	
    	private float rotinit;
    void Start () {
    	transform.position=new Vector3(transform.position.x,9.6f,transform.position.z);
    	lastpos=transform.position;
    	rotinit=transform.rotation.x;
    }
    	
    
    void Update () {
//keep the boat at water level
    	transform.position=new Vector3(transform.position.x,9.6f,transform.position.z);
//get distance between boat and player 
    	float distance=Vector3.Distance(player.transform.position,transform.position);
    
    	if(Input.GetKeyDown(KeyCode.T)==true){
    			onBoat=!onBoat;
    	}
    	if(onBoat==true){
//make player position be at the driver position on boat 
    			player.transform.position=position.transform.position;
    	}
    	if(onBoat==true & Input.GetKeyDown(KeyCode.I)==true){
    			forward=true;
    	}
    	if(onBoat==true & Input.GetKeyUp(KeyCode.I)==true){
    			forward=false;
    	}
    	if(onBoat==true & Input.GetKeyDown(KeyCode.J)==true){
    			left=true;
    	}
    	if(onBoat==true & Input.GetKeyUp(KeyCode.J)==true){
    			left=false;
    		
    	}
    	if(onBoat==true & Input.GetKeyDown(KeyCode.L)==true){
    			right=true;
    			
    	}
    	if(onBoat==true & Input.GetKeyUp(KeyCode.L)==true){
    			right=false;
    			
    	}
    	if(forward==true){
    		//transform.Translate(Vector3.right*Time.deltaTime*5);

//move forward (right =forward in this gameobjects case
    			boatr.AddForce(transform.right*Time.deltaTime*5000);
    	}
    	if(left==true){
//rotate left
    			transform.RotateAround(position.transform.position,Vector3.up,-turnspeed);
    			
    	}
    	if(right==true){
//rotate right
    		transform.RotateAround(position.transform.position,Vector3.up,turnspeed);
    		
    	}
    	
    	}
    	void FixedUpdate(){
//find speed of boat and set turnspeed based on boat speed
    		speed=((transform.position-lastpos).magnitude)/Time.deltaTime;
    		lastpos=transform.position;
    		
    		turnspeed=speed/5.8f;
    		turnspeed=Mathf.Max(turnspeed,.001f);
    		turnspeed=Mathf.Min(turnspeed,1f);
    	}
    }

This is a very bad way to arrange conditions, try any of these 2 (the 1st is the lazy bum version from lazy people like me, the 2nd is resembles your original script)

if-conditions arrangement 1

void Update () {
	transform.position=new Vector3(transform.position.x,9.6f,transform.position.z);
	float distance=Vector3.Distance(player.transform.position,transform.position);

	if(Input.GetKeyDown(KeyCode.T)){
		onBoat=!onBoat;
        if ( !onBoat ) {
           forward = false;
           left = false;
           right = false;
        }
	}

	if( onBoat ){
		player.transform.position = position.transform.position;
		forward = Input.GetKey(KeyCode.I);
		left = Input.GetKey(KeyCode.J);
		right= Input.GetKey(KeyCode.L);
	}

	if( left && !right ){ //One button at a time
		transform.RotateAround( position.transform.position, Vector3.up, -turnspeed * Time.deltaTime);
	}
	else if( right && !left ){ //One button at a time
	   transform.RotateAround( position.transform.position, Vector3.up, turnspeed * Time.deltaTime);
	}
}
        
void FixedUpdate(){
	if(forward){  
		boatr.AddForce(transform.right*Time.deltaTime*5000);
	}

	speed=((transform.position-lastpos).magnitude)/Time.deltaTime;
	lastpos=transform.position;

	turnspeed=Mathf.Clamp( speed/5.8f, 0.001f, 1f );
}

if-conditions arrangement 2

void Update () {
	transform.position=new Vector3(transform.position.x,9.6f,transform.position.z);
	float distance=Vector3.Distance(player.transform.position,transform.position);

	if(Input.GetKeyDown(KeyCode.T)){
		onBoat=!onBoat;
        if ( !onBoat ) {
           forward = false;
           left = false;
           right = false;
        }
	}

	if(onBoat){
		 player.transform.position=position.transform.position;
	
		if( Input.GetKeyDown(KeyCode.I) ){
			 forward=true;
		}
		else if( Input.GetKeyUp(KeyCode.I) ){
			 forward=false;
		}
		
		if( Input.GetKeyDown(KeyCode.J) ){
			 left=true;
		}
		else if( Input.GetKeyUp(KeyCode.J) ){
			 left=false;
		}
		
		if( Input.GetKeyDown(KeyCode.L) ){
			 right=true;
		}
		else if( Input.GetKeyUp(KeyCode.L) ){
			 right=false;
		}
	}

	if( left && !right ){ //One button at a time
		transform.RotateAround( position.transform.position, Vector3.up, -turnspeed * Time.deltaTime);
	}
	else if( right && !left ){ //One button at a time
	   transform.RotateAround( position.transform.position, Vector3.up, turnspeed * Time.deltaTime);
	} 
}
        
void FixedUpdate(){
	if(forward){  
		boatr.AddForce(transform.right*Time.deltaTime*5000);
	}

	speed=((transform.position-lastpos).magnitude)/Time.deltaTime;
	lastpos=transform.position;

	turnspeed=Mathf.Clamp( speed/5.8f, 0.001f, 1f );
}