以下のコードで可能です。(移動量が微妙にずれるので多分どこか間違っています。)
Camera MainCam;
void Start(){
    MainCam = GetComponent<Camera>();
}
void Update(){
    if(MainCam == null)
        return;
    if (Input.GetMouseButton(2))//マウスミドルボタンが押されたとき
    {
         //(1)マウス移動量を取得 ※1
         float moveX = Input.GetAxis(“Mouse X”);
         float moveY = Input.GetAxis(“Mouse Y”);
          //(2)moveX, moveYをゲーム画面に対して0-2に正規化※2
          moveX *= (Screen.currentResolution.width / Screen.width * 2f * 0.01f);
          moveY *= (Screen.currentResolution.height / Screen.height * 2f * 0.01f);
          //(3)projection逆変換 ※3
          moveX /= MainCam.projectionMatrix.m00;
          moveY /= MainCam.projectionMatrix.m11;
          //(4)view逆変換
          var mv = MainCam.cameraToWorldMatrix.MultiplyVector(new Vector4(moveX, moveY, 0));
          //(5)カメラを移動
          MainCam.transform.localPosition -= mv;// new Vector3(moveX, moveY, 0.0f);
         ///※1 Input. GetAxisで取得される値はモニターの解像度に対する変位を%として取得しているみたい。
         ///※2(ゲーム画面のスクリーン座標は-1から1で表される)
         ///※3 projection行列は多分対角行列だから逆変換はこれで良いと思う。
     }
}
通常、スクリーン座標系からワールド座標系へ変換するには
スクリーン座標(-1から1で正規化されてる) –Projection Matrixの逆行列で変換-> ビュー座標 –View Matrixの逆行列で変換 –> ワールド座標
を行います。UnityではInput.GetAxisで取得されるマウス変位がモニター全体に対して%で取得されるために(2)で実際のゲーム画面に対しての移動量を取得しています。