Make the spice blend: In a small bowl, whisk together garam masala, ground cumin, chili powder, paprika, salt, turmeric, ground coriander, cayenne (if using) and ground cardamom (if using). Set aside.
Marinate the chicken: Reserve 3 tablespoons of the spice blend and put it in a large bowl or freezer bag. Add the yogurt, lemon juice, 1 tablespoon grated ginger and 1 tablespoon minced garlic; whisk to combine. Add the chicken pieces and toss to coat. Marinate 30–45 minutes at room temperature or refrigerate overnight for best flavor.
Cook the chicken: Heat 2 tablespoons oil in a large skillet over high heat until just smoking. Working in batches, sear the chicken in a single layer until charred on each side, about 2 minutes per side; it will not be fully cooked. Transfer seared chicken to a bowl and repeat, adding more oil as needed.
Sauté aromatics: In a large braiser or Dutch oven, melt 3 tablespoons ghee over medium-high heat. Add the 1 tablespoon minced ginger, 1 tablespoon minced garlic and the remaining spice blend, and sauté for about 1 minute until fragrant.
Build the sauce: Stir in the fire-roasted diced tomatoes, 3/4 cup water and 1/3 cup cashews. Bring to a boil, then reduce heat to low and simmer gently for 8 minutes, stirring occasionally.
Blend the sauce: Carefully transfer the tomato-cashew mixture to a high-powered blender and purée until smooth, leaving a corner of the lid slightly open so steam can escape. Return the puréed sauce to the pan.
Finish: Stir in the heavy cream, kasoori methi and 1 teaspoon sugar. Add the seared chicken and any accumulated juices to the sauce. Gently simmer over low heat for about 8 minutes, until the chicken is cooked through. Add up to 1/2 cup additional water if needed to thin the sauce and adjust seasoning with salt, sugar or cayenne to taste.
Serve: Serve the butter chicken over basmati rice and garnish with optionally chopped cilantro.