There is a much easier way to do this using the new bin set_covergroup_expression construct introduced in 1800-2012. This allows you to create an array of values and use that array as the set of values for bins.
class BUS_coverage
Bus_trans tr;
Bus_conf conf;
bit [3:0] bin_set[$];
covergroup Bus_trans_coverage;
Burst_Length : coverpoint tr.burst_len
{
bins burst_len[] = bin_set;
endgroup
function new (string _name = "", Bus_conf cf1);
this.name = _name;
this.conf = cf1;
foreach(conf.burst_len_en[i]) if (conf.burst_len_en[i]) bin_set.push_back(i);
Bus_trans_coverage = new();
endfunction
Sorry, I did not have time to compile this for typos.