Assume your tables as named are read into three separate queries Could read them all into a single query, but this method is simpler if you are not used to writing code directly into the Advanced Editor.
let
//Merge Tables 1 and 3
Source = Table.NestedJoin(Table_1, {"Old Pack Name"}, Table_3, {"Old Pack Name"}, "Table_3", JoinKind.FullOuter),
#"Added Custom" = Table.AddColumn(Source, "Custom", each [Table_3][New Pack Name]{0}, type text),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Table_3"}),
//Add Index column for sorting the end results
#"Added Index" = Table.AddIndexColumn(#"Removed Columns", "Index", 0, 1, Int64.Type),
//Merge above with Table 2
//then remove unneeded columns
#"Merged Queries" = Table.NestedJoin(#"Added Index",
{"Custom", "Composition"}, Table_2, {"New Pack Name", "Composition"}, "Table_2", JoinKind.FullOuter),
#"Removed Columns1" = Table.RemoveColumns(#"Merged Queries",{"Custom"}),
//Expand and rename the merged table columns
#"Expanded Table_2" = Table.ExpandTableColumn(#"Removed Columns1", "Table_2", {"New Pack Name", "Composition"}, {"New Pack Name", "New Composition"}),
#"Renamed Columns" = Table.RenameColumns(#"Expanded Table_2",{{"Composition", "Old Composition"}}),
//add custom columns for STATUS and "Composition Status"
#"Added Custom1" = Table.AddColumn(#"Renamed Columns", "STATUS",
each if [Old Pack Name] = null then "NEW" else null, type text),
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "Composition Status",
each if [New Pack Name] = null then "REMOVED" else if [Old Pack Name] <> null then "KEPT" else null, type text),
//set proper column order
#"Reordered Columns" = Table.ReorderColumns(#"Added Custom2",
{"Old Pack Name", "Old Composition", "Composition Status", "New Pack Name", "New Composition", "STATUS"}),
//Fill Down Index column for sorting
// then sort into desired order
#"Filled Down" = Table.FillDown(#"Reordered Columns",{"Index"}),
#"Sorted Rows" = Table.Sort(#"Filled Down",{{"Index", Order.Ascending}, {"STATUS", Order.Ascending}}),
#"Removed Columns2" = Table.RemoveColumns(#"Sorted Rows",{"Index"})
in
#"Removed Columns2"