I also think that overwriting the fetch method in the collection is the ideal approach, and here's what you can do to avoid the problems you have faced:
1- Overwrite the fetch method in the collection and do your logic (number of requests and simultaneous/consecutive)
2- When you want to call the server use this method:
// this refer to the current collection
Backbone.Collection.prototype.fetch.call(this, options);
3- Pass your url in the fetch options:
...prototype.fetch.call(this, { url: /* your url*/, ...});