1) If you insist on "begin" and "end" as separate columns, what about a function based table constraint, where the function checks for overlapping ranges?
Because function based table constraints are not set orientated and triggers are. I think you will run into some concurrency problems with check constraints using functions.