SPFilterNode isn't going to give you a performance improvement. As I point out in the docs, the point of it is to future proof us from changes the jQuery team may make around how we can select z:row or rs:data kinds of namespaces.
Given that you are calling SPArrangeChoices 16 times, there are 15 Web Services calls to GetList which are somewhat redundant. An enhancment that I can make (and will add to my list) is to cache the results of the Get:List call so that I only need to do
it once per list per user page instance.
All of the calls to SPServices functions are simply going to take time. You're making a lot of calls. GetList doesn't need SPFilterNode because the namespace issue isn't in play. In fact, I believe that GetListItems is the only operation where it matters,
but it's the most-used operation.