It's kind of ugly, but I think something like that should work
Model::where(function($query) use ($date){
$query->where('start_date', '<=', $date)
->where('end_date', '>=', $date);
})->orWhere(function($query) use ($date) {
$query->where('start_date', '<=', $date)
->whereNull('end_date');
})->get()
Edit
Since you need other condition with it, you need to wrap this condition
Model::query()
->where(function($query) use ($date) {
$query->where(function($query) use ($date){
$query->where('start_date', '<=', $date)
->where('end_date', '>=', $date);
})->orWhere(function($query) use ($date) {
$query->where('start_date', '<=', $date)
->whereNull('end_date');
})
})
->where('another_column', true)
->get()
```