1. Saying "Excuse me" to ask a person on the street for a direction or call a waiter in a cafe.
In this case, you are apologizing in advance for inconvenience someone (you are about to interrupt someone from his routine and take up his time). Both 不好意思 and 对不起 can be used for this kind of situation. It is basically a polite phrase for getting someone's attention.
However, 不好意思 is more preferable than 对不起 because the former indicates "it is an embarrassment" in your part. You are in the process of seeking help from that person; while the latter implies " you are about to offend someone".
2. Saying "Sorry" when I want to apologize for something that I made a mistake on.
In this case, you should use 对不起 for a genuine apology. As answer from other thread indicated:
不好意思 = This is not pleasant, however it's not my fault (or not totally my fault), I'm not fully responsible for this. I'm not the loser in this incident. Avoiding to admit the mistake as own fault.
However, if the offend is minor and unintentional, for example: "you accidentally step on someone's foot", then saying 不好意思 (excuse me) is quite acceptable.
*请问 means "may I ask?" it isn't an apology. It is a polite way to "start asking a question"
*抱歉(sorry) is a more formal term for 对不起