With regards to your last remark, the documentation for objective.set_quadratic_coefficients is here. Here's the relevant snippet:
Sets coefficients of the quadratic component of the objective function.
To set a single coefficient, call this method as
objective.set_quadratic_coefficients(v1, v2, val)
where v1 and v2 are names or indices of variables and val is the value for the coefficient.
To set multiple coefficients, call this method as
objective.set_quadratic_coefficients(sequence)
where sequence is a list or tuple of triples (v1, v2, val) as described above.
v1 and v2 can be either names or indices (or one of each), but if you use indices only, you should get better performance (than if you had used names). In general, I think it should be much faster to use objective.set_quadratic, though. See this page in the user's manual for general advice on using indices vs names.
#CPLEXOptimizers#DecisionOptimization