I won't say this is the easiest/best method but it should work... I assume you are using the node_reference, cck and views modules. I think you should do 2 things:
First, you should not create a new content_type for the subjects. It is better to create a taxonomy "campaigns" and set it up so you can choose a taxonomyitem from the "projects" content-type. You can use this to filter the "subjects" in your view(s).
Second, here's an example of loading a node using the node_reference module:
In my example let's say there are 2 content types: event and eventsubscribers
an event has a reference to multiple eventsubscribers. For this example I will be theming the content type by using the tpl.php . For more information have a look at: http://drupal.org/node/17565 , http://drupal.org/node/53464 and http://drupal.org/node/266817
Create a view with the main item you want to filter on. In my example every event has eventsubscribers attached to it so i create a view filtering on node type (event) and node published (yes).
Set the row style to 'node'. This will give you the ability to make a node-[content-type].tpl.php file in your theme map . Create the node-[content-type].tpl.php file in your theme map (node-event.tpl.php)
In the tpl.php file you can print all data using (php): print_r($node);
this will give you all fields. Among those fields will be the node_reference field.
The node_reference field gives you id's from the nodes, so use node_load to load the full node in a variable. eg: $picturenode = node_load($node->field_ref_subscriber[0]['nid'])
. for multiple picture, use a foreach loop around it.
After the node_load, you will have all fields from the node_reference in the variable (you can use print_r again to see how the array looks).You can use this variable to print out the picture. eg: print($picturenode->field_image[0]['view']);
In your specific case, the node_load will give you values instead of views. So use the imagecache function to theme the pictures (no idea what to do with videos though). To make it a bit easier, here's some example code:
<?php
// $Id: node.tpl.php,v 1.7 2007/08/07 08:39:36 goba Exp $
?>
<div class="node<?php if ($sticky) { print " sticky"; } ?><?php if (!$status) { print " node-unpublished"; } ?>">
<?php if (!$page) { ?>
<h2 class="nodetitle"><a href="<?php print $node_url?>"><?php print $title?></a></h2>
<?php }; ?>
<div class="content"><?php print $node->content['body']['#value']; ?></div>
<div class="subscribers"><?php //this will load all subscribers to the event
foreach((array)$node->node_ref_subscribers as $subscriber){
$subscriberdata = node_load($subscriber['nid']); //load the subscriber values in $subscriberdata
print($subscriberdata->field_subscriber_body[0]['value'];); //print subscriber field
}
?></div>
<?php if ($links) { ?><div class="links">» <?php print $links?></div><?php }; ?>
</div>
<?php
//print_r($node);
?>
This example has not been tested, and is only to be seen as a rough version of what you could do. Use print_r to see the data which is available in the node (and node_reference after node_load).