Yes, you would likely need to check if any of the fields below the heading have contents before showing the heading.
This gets more complicated the more items you have under the heading.
I think code like this might work:
{|<!-- Table start -->
{{#if:{{{Stuff1|{{{Stuff2|{{{Stuff3}}}}}}}}}|<!-- Check for stuff under heading used -->
{{!}}- style="background-color:#444;"
{{!}}colspan="2"{{!}}Heading
{{!}}-
{{!}} style="background-color:gray;"{{!}} Stuff1 {{!}}{{!}} {{{Stuff1|About stuff1}}}
{{!}}-
{{!}} style="background-color:gray;"{{!}} Stuff2 {{!}}{{!}} {{{Stuff2|About stuff2}}}
{{!}}-
{{!}} style="background-color:gray;"{{!}} Stuff3 {{!}}{{!}} {{{Stuff3|About stuff3}}}
}}
|}<!-- Table end -->