In Solr to do query for a date range you use the syntax:
field_name: [Start TO Finish]
You can also use wildcards and specific constants in a logical way e.g:
[NOW TO *] or [* TO *]
To search over documents that do not have a value for that date field, e.g. is NULL, you use the syntax:
-field_name: [* TO *].
It is hard though, to search for dates that are EITHER NULL OR lie in a specific range.
It would seem logical to specify
date_field:[Start To Finish] OR -date_field: [* TO *]
Unfortunately Solr does not appear to support specifying a field multiple times in this way.
So the trick is to effectively query for everything you do not want, then negate the result.
This approach says select me anything that isn't in the range of this date and is not null. When you invert that result, you get all the documents sit inside the date range or are NULL.
The query to weave this magic is
-(-date_field:[Start TO Finish] AND date_field:[* TO *])