Prep the chicken. If using raw chicken, season with salt and pepper. Warm 1 tablespoon oil in a large pot over medium heat.
Sear chicken 3–4 minutes per side until lightly browned. Remove to a plate. If using pre-cooked chicken, skip this step and start with vegetables.
Sauté aromatics. Add remaining oil and the onion, celery, and carrot.
Cook 5–6 minutes, stirring, until softened and fragrant. Add garlic and cook 30–60 seconds, just until you smell it.
Add cauliflower and broth. Stir in cauliflower florets, thyme, bay leaf, and enough broth to cover vegetables by about an inch. If you seared raw chicken, nestle it back into the pot now.
Simmer. Bring to a gentle boil, then lower to a simmer.
Cook 15–20 minutes, until the cauliflower is very tender and chicken (if raw) is cooked through.
Shred the chicken. Remove chicken and bay leaf. Shred the chicken with two forks into bite-size pieces.
Blend for creaminess. Use an immersion blender to puree the soup until silky. For a textured finish, leave some small chunks.
No immersion blender? Carefully blend in batches in a standard blender, then return to the pot.
Finish with cream and cheese. Stir in heavy cream and Parmesan until smooth. Return shredded chicken to the pot.
Warm on low 3–5 minutes. Do not boil after adding dairy.
Season and brighten. Taste and add salt and pepper as needed. Squeeze in a little lemon juice to lift the flavors.
If the soup is too thick, add a splash of broth; if too thin, simmer a few minutes more.
Garnish and serve. Ladle into bowls and top with chopped parsley or chives, extra Parmesan, and cracked black pepper.