How to move a ball "faster" looking from a Camera

Hi everybody,
here it is my problem. I’m trying to move my ball correctly but it seems there is something wrong in my code. I have my ball and behind it there is my Main Camera. I used this code to move my ball in relation of the view of my Main Camera:

public Vector3 forward;
public Vector3 right;
public Vector3 moveDirection;

void Update () {
	forward = GameObject.Find("Main Camera").transform.TransformDirection(Vector3.forward);
    	forward = forward.normalized;
    	right  = new Vector3(forward.z, 0, -forward.x);
    	h = Input.GetAxis("Horizontal");
    	v=Input.GetAxis("Vertical");

    	moveDirection  = (h * right  + v * forward)*speed ;
	rigidbody.AddForce(moveDirection);
}

But the movement is really “slow”. I need A LINEAR MOVEMENT. Not a force but I don’t know how to apply it. Also when my ball is in air it falls down very slowly. What I’m trying to do is to have a movement like the one in this video:

I suppose that the “addForce” call is a wrong way to do that. If I add a force to my ball and I want to let it change direction, I have to counteract the force acting on my ball and I don’t want this. I know that in that video I don’t see the Player from behind but the Camera corresponds with the Player view. I don’t want this in my game as I explained you before. In my game I have allready put the MouseOrbit script to my Main Camera. What I want is well shown in that video. Can you please help me? Thank you very much!

Here’s a new script. The transForward variable needs to be initialized by dragging the camera on top of this variable. The script then utilizes the camera to calculate the forward vector for the object controlled by this script. Just for my own testing, it uses the mouse buttons as well as the arrow keys for forward and backward movement.

using UnityEngine;
using System.Collections;
public class CharHandler : MonoBehaviour {
	public Transform transForward;  // Transform to use for forward movement
	public float speed = 1000.0f;
	public float jumpSpeed = 11.0f;
	public float gravity = 20.0f;
	private Vector3 moveDirection = Vector3.zero;
	private CharacterController controller;
	
	void Start()
	{
		if (transForward == null)
		{
			Debug.Log ("trans not setup");
			transForward = transform;
		}
		controller = GetComponent<CharacterController>();
	}
	void Update() {        
		Vector3 forward = Vector3.Cross (transForward.right, Vector3.up);
		forward.Normalize();
			transform.LookAt (transform.position + forward);
		if (controller.isGrounded) {
			
			moveDirection = Vector3.zero;
			
			if (Input.GetKey (KeyCode.UpArrow) || Input.GetMouseButton (0)) 
				moveDirection += forward * speed * Time.deltaTime;
			if (Input.GetKey (KeyCode.DownArrow)  || Input.GetMouseButton (1))
				moveDirection += -forward * speed * Time.deltaTime;
			
			if (Input.GetButton("Jump"))                
				moveDirection.y = jumpSpeed;                    
		}   
		moveDirection.y -= gravity * Time.deltaTime;        
		controller.Move(moveDirection * Time.deltaTime);    
	}
}