How to solve the problem of the minimum coverage of the clique by using linear / full programming in a reasonable time?

Having an undirected graph, I try to partition all its vertices in cliques so that the number of cliques is as small as possible. The problem can be formulated as an entire program, where each vertex corresponds to an integer variable (index of its clique), and whose objective function is to minimize the sum of all these variables. For each edge *do not* in the graph, a condition is created to ensure that the corresponding vertex variables are not equal, like this:

$$ b_k in {0, 1 } $$

$$ x_i – x_j + M * b_k> = 1 $$

$$ x_j – x_i + M * (1-b_k)> = 1 $$

$ b_k $ indicates the relationship between the values of $ x_i $ and $ x_j $. With a big enough $ M $one of the conditions is always true, in which case the other guarantees that the distance between the values is at least 1.

However, this approach seems to have an exponential complexity, operating only on very small graphs.

Assuming that the number of cliques should be reduced and there is usually no border between the cliques, is there a better approach to this problem? I think first of all to find the maximum independent group and use it to correct some variables (because it is guaranteed that they belong to different cliques). Will it help to increase speed?