A few Computed Expressions & potentially some Shared Fields should make this possible!
So first to determine if we need shared fields: if the Label of the ASIL Fields in all of the Safety Requirement Trackers are the same, and the same for the CAL Fields in the Security Requirement Trackers, then we can simply use that common Label to reference the field in the Test Case tracker. Otherwise - if the labels for the field representing the same value in say two Safety Requirement Trackers are different for example, then we will need to create a Shared Field to allow the Test Case tracker to easily obtain the value no matter the label.
Of course if the different fields across trackers are different types, that may require additional logic to account for this in your expressions.
In this case, I simply created 4 trackers - two Safety Requirement with ASIL Fields and 2 Security Requirement with CAL Fields - but with different labels, so requiring a Shared Field:

ASIL Fields in the two Safety Requirements

CAL Field in Physical Security Requirement

CAL Field in Digital Security Requirement
Customizing the Test Case tracker is next! For the ones not requiring a shared field, they'd look like so:
Verifies[0]['ASIL Field']
where ASIL Field is the label of the upstream tracker item fields.
Where a Shared Field is needed, it's a slight change to use the sharedField function instead:
sharedField("CALField", Verifies[0])
where CALField is the Shared Field Name.
Of course if you need to support multiple upstream requirements, you'd use some list-functions such as a Projection and any additionally needed logic, such as summing up all the values for example:
sum(Verifies.{upstream | sharedField("CommonField", upstream)})
An example of the above fields (and an additional common field) setup looks like so:
Test Case with no Verifies:
both ASIL & CAL fields are hidden with the Common Field without a value
Test case with a Safety Requirement upstream:
ASIL Field visible & populated

Test Case with a Security Requirement upstream:
CAL Field visible & populated
If you additionally desire to hide the unused fields, you can of course use another computed expression for the Hide If value:
empty Verifies || contains(Verifies[0].tracker.name, "Security")
and make this as complex or as simple as needed.
Hopefully this is enough to get you started, feel free to reply if there is anything I missed, and good luck!