I'd set up a related table linked by date so that every record with a given date represents a reserved or "blocked" 30 minute interval (assuming that 30 minute intervals are the smallets period of time you want to block out). These records can also contain a foreign key match to a delivery record so you can tell which deliveries blocked out one or more such time intervals and so that you can easliy "unblock" those times if a delivery is cancelled or rescheduled.
You can then check for any existing records in a range of values for a given date to see if a needed block of time is free. You can even use a portal to see whether or not the time interval in question is free when setting up your delivery record.
Note that relationships can use inequalities so that a relationship like this could be used to check for reserved blocks of time:
Deliveries::Date = TimeBlocks::Date And
Deliveries::Departure Time < TimeBlocks::Time And
Deliveries::End Time > TimeBlocks::Time
And to reserve blocks of time, you'd use a script to create the needed records in a loop that starts creating records with Departure time and increments by 30 minutes until End Time is reached.